我有一个收藏品。我需要通过“A”属性对集合进行分组。我必须用“B”属性对每个组进行排序。然后从每组中选择前5个。
有人可以为此建议LINQ查询吗?
我尝试的方式不起作用。
(from item in Recipes
orderby item.Rating descending
group item by item.MainCategory).Take(5)
查询应返回IEnumerable<IGrouping<string, myrecipetype>>
答案 0 :(得分:6)
你正在前五组。相反,您需要从每个组中选择前五个项目:
from item in Recipes
orderby item.Rating descending
group item by item.MainCategory into g
select g.Take(5)
更新:
from item in Recipes
orderby item.Rating descending
group item by item.MainCategory into g
select g.Take(5).GroupBy(item => item.MainCategory).First()
答案 1 :(得分:1)
编辑:在你的情况下,添加了排序(在更新OP之后):
Recipes.GroupBy(recipy => recipy.MainCategory)
.Select(recipyGroup => recipyGroup.OrderBy(recipy => recipy.Rating)
.Take(5))