将一个集合分组并从每个组中取5个

时间:2013-12-10 13:42:16

标签: c# linq

我有一个收藏品。我需要通过“A”属性对集合进行分组。我必须用“B”属性对每个组进行排序。然后从每组中选择前5个。

有人可以为此建议LINQ查询吗?

我尝试的方式不起作用。

 (from item in Recipes
 orderby item.Rating descending
 group item by item.MainCategory).Take(5)

查询应返回IEnumerable<IGrouping<string, myrecipetype>>

2 个答案:

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