2

linq group By 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
            })
4

1 回答 1

3

你快到了。TakeSelect语句中使用:

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

于 2016-10-18T21:22:30.900 回答