2012-04-03 6 views
3

C#의 개체 목록이 있습니다. 모든 개체에는 code1 및 code2 속성이 포함됩니다 (다른 속성 중에서).목록에 일치하는 속성이있는 개체 그룹화

예 : 31 개

가능한 코드 1 값이있다
List -> object = id, name, code1, code2, hours, amount. 

. 가능한 코드 2 값은 10 가지입니다.

나는 그룹에 부모 목록 내에서 저장됩니다 자신의 목록에 동일한 코드 1과 CODE2 값 (고유 조합)을 가지고 함께 모든 객체 (각 목록은 나중에 이상 반복 할 수 있도록.)

필요 당신은 같은 것을 원하는처럼
+0

LINQ로 목록을 필터링 해 보았습니까? Sql 쿼리 구문을 사용하여 목록 필터링을 쉽게 만듭니다. – phadaphunk

답변

9

는 소리 :

var groups = list.GroupBy(x => new { x.code1, x.code2 }); 

// Example of iterating... 
foreach (var group in groups) 
{ 
    Console.WriteLine("{0}/{1}:", group.Key.code1, group.Key.code2); 
    foreach (var item in group) 
    { 
     Console.WriteLine(" {0} ({1})", item.id, item.name); 
    } 
} 
+0

그게 내가 필요한 것입니다. 솔루션 및 예제 반복 주셔서 감사합니다. – Baxter

+0

새로운 오브젝트 => list.GroupedBy (x => new TempObject (x.code1, x.code2));로 캐스팅 한 것과 동일하게 작동합니까? – cpoDesign

4

Enumerable에서 확장이 당신의 친구입니다 (* 친구입니다 :)

var groups = lists.GroupBy(item => new { item.code1, item.code2 }); 

그리고 .... 패? 내가하기 전에, egendary Skeet 히트 포스트, SHAME!

1 대까지의 시간 Skeet (하, 오른쪽). 사전에 공통 항목을 그룹화 할 수도 있습니다.

var mapping = list 
    .GroupBy(item => new { item.code1, item.code2 }) 
    .ToDictionary(g => g.Key, g => g.ToList()); 

이제 매핑은 Dictionary<anon{code1, code2}, List<YourObject>>입니다. 물론 값에 대한 ToList를 생략 할 수 있으며 사전의 값 유형은 IEnumerable 인 IGrouping이됩니다.

또한 ToLookup

var lookup = list.ToLookup(item => new { item.code1, item.code2 }); 

결과를 주어진 키 타입의 키를 가지고 있으며, 사용되는 목록 유형의는 IEnumerable 인 iLookup으로되어 사용할 수 있습니다. 사전이 아니지만 비슷하게 사용할 수 있습니다.

+2

'list.ToLookup (x => new {item.code1, item.code2})'를 사용하는 것이 더 간단합니다 :) –

+1

도와 주셔서 고맙습니다 ... :) – payo

관련 문제