如何使用 Entity Framework 获取每个组中的前 3 个元素

How to take top 3 elements in each group using Entity Framework

我在源中有数据 table。

我想使用 lambda 表达式和 Entity Framework 在列表中获得这种结果。我不知道该怎么做。我需要为每个 CategoryId 获取前 3 行。

可能使用这样的东西:

context.GroupBy(x => x.CategoryId)
       .Select(group => new { 
                                CategoryId = group.Key, 
                                NameId = group.Select(x => x.NameId), 
                                group.OrderByDescending(e => e.Count).Take(3)
                            })
       .ToListAsync()
var list = context
    .GroupBy(x => x.CategoryId)
    .SelectMany(group => group.OrderByDescending(e => e.Count).Take(3))
    .OrderByDescending(e => e.Count)
    .ToListAsync();

如果你想要匿名类型:

var list = context
    .GroupBy(x => x.CategoryId)
    .SelectMany(group => group.OrderByDescending(e => e.Count).Take(3))
    .Select(x => new
    {
        x.CategoryId, 
        x.NameId, 
        x.Count
    })
    .OrderByDescending(x => x.Count)
    .ToListAsync();