Linq -按Id分组,按顺序排序,然后选择每个分组的前5名

本文关键字:5名 然后 Id 分组 顺序 Linq 排序 选择 | 更新日期: 2023-09-27 18:13:33

是否有办法在linq组按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
            })

Linq -按Id分组,按顺序排序,然后选择每个分组的前5名

你就快成功了。在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>>。如果你想让它变平,用SelectMany代替Select