从 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();