2009-05-23 8 views
1

어떻게 그룹이 Linq에서 2 Field인가? 이 할 방법 주문 ID에 의해서가 아니라 두 개의 필드 등으로어떻게 Linq에 2 그룹 필드와 그룹?

(from i in info 
group i by i.OrderId into g 
select new { orderId = g.Key, infos = g }); 

뿐만 아니라 ... 주문

group by i.orderId And i.City 

?

var result = from i in info 
      group i by new { OrderId = i.OrderId, City = i.City } into g 
      select new { OrderId = g.Key, Infos = g }; 

단순히 LINQ가있는 일을해야 익명 형식의 모든 필드에 대한 기본 같음 comparers를 사용할 수 있도록 익명의 유형으로 키를 생성 :

답변

4

난 당신이 뭔가를하려는 생각 대부분의 상황.

+1

는 그것은이 같은 익명 형식을 사용하는 컴파일 된 응용 프로그램에 반사경을 열 또한 매우 유용 할 수 있기 때문에 : 최종 결과 집합이에 OrderID를 될 수있는 OrderID가 필요한 경우, 당신은 다음을 수행해야합니다 왜 위의 작품을 이해합니다. Equals(), GetHashCode() 등을 어떻게 구현해야 하는지를 익명이 아닌 유형으로 만들 필요가있을 때도 나쁜 지침이 아닙니다. – Josh

+0

@Josh : 예, 좋습니다. 그 말은 사용자 정의 유형의 기본 비교자를 사용하는 것보다 훨씬 더 잘 수행 할 수 있습니다. – Noldorin

3

Noldorin의 답변에 대한 후속 조치로, 익명 형식의 필드 이름을 설정하는 필드와 일치 할 때 해당 필드 이름을 생략 할 수 있습니다.

예 :

var result = from i in info 
      group i by new { i.OrderId, i.City } into g 
      select new { OrderId = g.Key, Infos = g }; 
2
Noldorin의 조쉬 아인슈타인의 대답에 또 다른 후속은 ... OrderID를이 경우 두 가지 속성, OrderID를 가진 새로운 개체가 전체 키 ...에 걸립니다

및시.

var result = from i in info 
      group i by new { i.OrderId, i.City } into g 
      select new { OrderId = g.Key.OrderId, Infos = g };