2012-06-26 2 views
0

다음 코드와 동일한 결과를 얻으려면 단일 LINQ 식을 작성하는 방법이 있습니까? 당신은뿐만 아니라 GroupBy을 사용할 수LINQ를 사용하여 집합이 유효 항목과 유효하지 않은 항목으로 어떻게 분할됩니까?

// Valid conversions 
foreach (var valid in partitioned[true]) 
{ 
} 

// Invalid conversions 
foreach (var invalid in partitioned[false]) 
{ 
} 

하지만 ToLookup 즉시 결과를 구체화하고 당신의 편리한 방법을 제공합니다 :

var partitioned = extracted.ToLookup(c => validations.All(valid => valid(c))); 

다음 :

 var validations = new Func<conversion, bool>[] { 
      c => c.affiliate.affiliate_id > 0, 
      c => c.campaign_id > 0 
     }; 

     var invalidConversions = from c in extractedConversions 
           where validations.Any(valid => !valid(c)) 
           select c; 

     var validConversions = from c in extractedConversions 
           where validations.All(valid => valid(c)) 
           select c; 

답변

4

그럼 당신은 같은 것을 사용할 수 있습니다 여기에 당신이 원하는 것 같아요.

+0

권리를 모르겠어 그것이받는 기능의 결과 인 유형의 ... 그건 내가 원했던 것입니다. –

1

당신의 conversion 클래스는 당신이 할 수있을 GetHashCode 재정의 Equals을 가지고있는 경우 : - TooLookup이 양동이에 각 항목을 이동 내 자신이 있음을 보지 않은 이유

var validations = new Func<conversion, bool>[] { 
    c => c.affiliate.affiliate_id > 0, 
    c => c.campaign_id > 0 
}; 

var invalidConversions = 
    from c in extractedConversions 
    where validations.All(valid => !valid(c)) 
    select c; 

var validConversions = 
    extractedConversions.Except(invalidConversions); 
관련 문제