从 linq 中的每个组中检索 n 个项目
Retrieve n items from each group in linq
我在这个网站上搜索更多 "get 4 top item from each group",但是有很多关于从每个组中获取第一个项目的话题,例如
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() });
但 return 每组只有第一项。如何更改代码以从每组中获取 4 个项目?
试试这个:
var rr = db.Products.GroupBy(x => x.ProductSubTypeCategoryId).Select(g => new { GroupName = g.Key, Items = g.Take(4).ToList() });
这应该给你一个匿名对象,其中 GroupName
属性 returns ProductSubTypeCategoryId 和 Items
属性 returns每组最多 4 个项目的列表。
用 SelectMany()
试试这样的东西
var rr = db.Products
.GroupBy(x => x.ProductSubTypeCategoryId)
.SelectMany(g => g.OrderBy(e => e.PersianName).Take(4))
.ToList();
我在这个网站上搜索更多 "get 4 top item from each group",但是有很多关于从每个组中获取第一个项目的话题,例如
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() });
但 return 每组只有第一项。如何更改代码以从每组中获取 4 个项目?
试试这个:
var rr = db.Products.GroupBy(x => x.ProductSubTypeCategoryId).Select(g => new { GroupName = g.Key, Items = g.Take(4).ToList() });
这应该给你一个匿名对象,其中 GroupName
属性 returns ProductSubTypeCategoryId 和 Items
属性 returns每组最多 4 个项目的列表。
用 SelectMany()
var rr = db.Products
.GroupBy(x => x.ProductSubTypeCategoryId)
.SelectMany(g => g.OrderBy(e => e.PersianName).Take(4))
.ToList();