2013-07-15 9 views
2

.NET LINQ에서 그룹별로 가장 최근 항목을 반환하려고합니다.LINQ에서 Group By를 수행 할 수 있습니까? 그렇다면 가장 최근의 항목 만 반환하십시오 (그룹당).

SQL에서 PARTITION을 수행하는 것을 상기시켜줍니다. 가장 최근 (파티션 당) 순서로 파티션 당 상위 1 개를 가져옵니다.

내가 LINQ 코드의 시작을 가지고 지금까지

..

from p in products 
group p by new {p.Provider.ProductId, p.Provider.Name} into g 

하지만 난 order by p.CreatedOn desc를 추가하고 단지 파티션/그룹 당 .Take(1), 을하는 방법을 모르겠어요. (쿼리의 끝에 추가) 같은

+0

'select g.OrderByDescending (x => x.CreatedOn). First()'? –

+0

또는 FirstOrDefault()가 더 좋을까요? – Alicia

+0

wai! omg .../나는 그것을 시도하기 위해 도망 간다. ... –

답변

5

뭔가 :

select new { 
    g.Key, 
    Product = g.OrderByDescending(x => x.CreatedOn).First() 
} 

이 작업을 수행해야합니다; (어쨌든 항목에서 사용할 수 있기 때문에) 당신이 명시 적으로 키가 필요하지 않은 경우

select new { 
    g.Key.ProductId, 
    g.Key.Name, 
    Product = g.OrderByDescending(x => x.CreatedOn).First() 
} 

또는 다음 단지 : 혹은보다 편리하게

select g.OrderByDescending(x => x.CreatedOn).First() 

기본적으로, 각 gIGrouping<T>입니다 (몇몇 익명 T 경우), 이는 각 g가 기이고 .Key 속성했음을 의미하고, 각 gIEnumerable<> 시퀀스이고 원래 요소 (아마도 Product)의