从linq中的每个组中检索n个项目

时间:2017-02-12 20:11:54

标签: c# linq greatest-n-per-group

我在这个网站上搜索更多“从每个组中获取4个顶级项目”,但是有很多关于从这样的每个组中获取第一个项目的话题

var rr = db.Products
           .GroupBy(x => x.ProductSubTypeCategoryId, (key, g) => g.OrderBy(e => e.PersianName)
           .Take(4).ToList());

var rr = db.Products
           .GroupBy(x => x.ProductSubTypeCategoryId).Select(g => new { pname = g.Key, count = g.Count() });

但只返回每组的第一项。如何更改代码以从每个组中获取4个项目?

2 个答案:

答案 0 :(得分:3)

试试这个:

var rr = db.Products.GroupBy(x => x.ProductSubTypeCategoryId).Select(g => new { GroupName = g.Key, Items = g.Take(4).ToList() });

这应该为您提供一个具有GroupName属性的匿名对象,该属性返回ProductSubTypeCategoryId和Items属性,该属性返回每个组最多4个项目的列表。

答案 1 :(得分:1)

使用SelectMany()

尝试类似的操作
var rr = db.Products
       .GroupBy(x => x.ProductSubTypeCategoryId)
       .SelectMany(g => g.OrderBy(e => e.PersianName).Take(4))
       .ToList();