2016-10-18 11 views
1

linq 그룹에 어떤 방법이 있습니까? Id로 주문 내림차순으로 각 그룹의 상위 5 개를 선택 하시겠습니까? 지금은 아래에 나와있는 코드가 있지만, .Take(5)을 사용했으며 그룹화에 관계없이 상위 5를 분명히 선택합니다.Linq - Group By Id, Order By 그리고 각 그룹의 상위 5 개를 선택하십시오.

Items = list.GroupBy(x => x.Id) 
      .Select(x => x.OrderByDescending(y => y.Value)) 
      .Select(y => new Home.SubModels.Item { 
       Name= y.FirstOrDefault().Name, 
       Value = y.FirstOrDefault().Value, 
       Id = y.FirstOrDefault().Id 
      }) 

답변

1

거의 다 왔었습니다. Select 성명에서 Take을 사용

var items = list.GroupBy(x => x.Id) 
       //For each IGrouping - order nested items and take 5 of them   
       .Select(x => x.OrderByDescending(y => y.Value).Take(5)) 

이는 IEnumerable<IEnumerable<T>>를 반환합니다. 평평하게하고 싶다면 SelectSelectMany으로 대체하십시오.

+0

나는 초기 응답을 selectmany와 함께 사용했으며 완벽하게 작동합니다. 도와 주셔서 감사합니다! –

+0

@BadDub - 당신은 매우 환영합니다 :) –

+1

나는 내려갈 시간을 기다리고있었습니다. –