Linq - Group By Id,Order By然后选择每个分组的前5个

时间:2016-10-18 21:20:48

标签: c# linq group-by take

linq group中是否有某种方式按ID,按顺序降序然后选择每个分组的前5位?现在我有一些代码如下所示,但我使用了.Take(5),它显然选择了前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 个答案:

答案 0 :(得分:1)

你快到了。在Take声明中使用Select

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>>。如果您希望将其展平,请使用Select

替换SelectMany