我如何在实体框架中编写此查询

How do i write this query in entity-framework

我有一个 table(项目)包含这种格式的记录。

Name     | ProductId | Owner
Product1 | 1         | xx
Product2 | 2         | yy
Product1 | 1         | xx
Product3 | 3         | xx
Product3 | 3         | xx
Product3 | 3         | xx
Product4 | 4         | xx
Product2 | 2         | xx
Product5 | 5         | xx

我想编写 entity framework 查询,该查询将 return 前 3 个产品、它们的名称和计数。结果应该是这样的。

Result
Name: [Product3, Product2, Product1],
Count:[3, 2, 2]

我已经在 SO 上检查了其他答案,但仍然没有找到接近我想要的东西。注意 Name 和 Count returns 分别是前 3 名的列表。

以下应该有效:

products.GroupBy(p => p.ProductId)
        .OrderByDescending(g => g.Count())
        .Take(3);

你可以试试这个代码

var query = context
            .products
            .GroupBy(p => p.Name)
            .OrderByDescending(g => g.Count())
            .Take(3);

products.Select(p => new
{
    Name = query.Select(g => g.Key).ToList(),
    Count = query.Select(g => g.Count()).ToList(),
})
.FirstOrDefault();

虽然我建议您从数据库中获取前 3 名的产品,然后将其放在不同的列表中,如下所示:

var products = context.products
            .GroupBy(p => p.Name)
            .OrderByDescending(g => g.Count())
            .Take(3)
            .Select(g => new
            {
                Name = g.Key,
                Count = g.Count()
            })
            .ToList();
List<string> names = products.Select(p => p.Name).ToList();
List<int> counts = products.Select(p => p.Count).ToList();