2010-04-28 5 views
1

는 데이터로 IList<Foo>이 보이는 세트를 감안할 때 :LINQ를 사용하여 동일한 컬렉션의 두 속성간에 교차를 찾는 방법은 무엇입니까?

ID CHILD PARENT TYPE 
1 102 101 UPSELL 
1 103 101 UPSELL 
2 102 101 BONUS 
2 104 103 BONUS 
3 102 101 BONUS 
4 102 101 PRODUCT 
4 104 102 PRODUCT 

어떻게 LINQ는 동일한 ID를 가진 부모가 아이를 찾는 데 사용할 수 있습니까?

원하는 출력이 나는 이것이 당신이 찾고있는 무엇을 생각

ID CHILD PARENT TYPE 
4 102 101 PRODUCT 
+0

@everyone : 그는 출력에 ID가 포함 된 이유를 모르지만 모든 ID 내에서 발생하는 쌍 (자식, 부모)을 요구합니다. @ aponzani : 지금까지 무엇을 시도 했습니까? –

+1

원하는 출력이 사용자가 요구하는 것과 일치하지 않거나 BlueRaja에서 설명한 것과 같습니다. 모든 ID에서 발생하는 모든 (하위, 상위) 쌍을 찾는 것이 어렵지 않습니다. 그러나 그것의 출력은 ID와 TYPE을 포함하지 않을 것입니다. 왜냐하면 그것들은 공통적이지 않기 때문입니다. 더 자세하게 얘기해 주 시겠어요? – Dathan

답변

3

입니다. 먼저 ID별로 그룹화하여 각 그룹을 개별적으로 처리 할 수 ​​있지만이를 단일 쿼리로 결합하는 방법이있을 수 있습니다.

var grouping = foos.GroupBy(f => f.ID); 
foreach(var g in grouping) 
{ 
    var result = (from f1 in g from f2 in g where f1.Child == f2.Parent select f1); 
    if(result.Any()) 
    { 
     // you have your answer 
    } 
} 
+0

나는 지금까지 GroupBy와 foreach를 가지고 있었지만, 시도하지 않은 것은 중첩 된 froms였습니다. 감사! – aponzani

+0

+1 질문을 파악하는 데 도움이됩니다. 질문에 대한 답을 리버스 엔지니어링 할 때 나는 당신의 답을 사용했습니다 :). 나는 그것이 의미를 갖도록 질문을 갱신했다. –

관련 문제