我有一个表(Items),其中包含此格式的记录。
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
我想编写实体框架查询,它将返回前3个产品,它们的名称和Count。结果应如下所示。
Result
Name: [Product3, Product2, Product1],
Count:[3, 2, 2]
我已经在SO上检查了其他答案,但仍然找不到我想要的东西。注意Name和Count分别返回前3个列表。
答案 0 :(得分: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();
答案 1 :(得分:2)
以下内容应该有效:
products.GroupBy(p => p.ProductId)
.OrderByDescending(g => g.Count())
.Take(3);