获取前3个最受欢迎的项目c#linqEF


public class OrderItem
{
[Key]
public int ItemId { get; set; }
public int ProductId { get; set; }
public virtual Product product { get; set; }
public int Quantity { get; set; }
}
public class Product
{
[Key]
public int ProductId { get; set; }
}

这是我的两节课。我想按每种产品的数量选出前三名最受欢迎的产品。类似:

[ProductTable]
1
2
3
4

[OrderItemTable]
1, 1, 20
2, 2, 10
3, 3, 5
4, 4, 100
5, 3, 25

结果应该是:
4、3、1或产品列表
谢谢。

我确信这绝不是最优的,但我相信这正是你想要的

context.Set<OrderItem>()
.GroupBy(x=>x.ProductId)
.Select(x=>new{ProductId=x.Key, QuantitySum=x.Sum(a=>a.Quantity)})
.OrderByDescending(x=>x.QuantitySum)
.Select(x=>x.ProductId)
.Take(3)
.ToList();

下面的代码已经过测试,运行正常,我希望能帮助你

var row = (from x in OrderItem
group x by new { x.ProductId } into val
select new
{
val.Key.ProductId,
QuantitySum = val.Sum(s => s.Quantity)
}).OrderByDescending(i => i.QuantitySum).Take(3);

最新更新