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
})
答案 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