Max的Linq分组不起作用
本文关键字:不起作用 Linq Max | 更新日期: 2023-09-27 18:18:32
我有一个包含产品的表
Id | Name | Order
1 | product 1 | 5
1 | product 1 | 9
1 | product 1 | 2
2 | product 2 | 0
3 | product 3 | 1
我只需要返回最大订单号的产品:
Id | Name | Order
1 | product 1 | 9
2 | product 2 | 0
3 | product 3 | 1
试过了,但是不工作:
var items = (from i in db.products
group i by new
{
i.Id,
i.Name,
i.Order
} into g
select new
{
g.Key.Id,
g.Key.Name,
Order = g.Where(d => d.Order == g.Max(xx => xx.Order )).First().Order })
,但它仍然返回所有5个结果。谢谢你
变化
group i by new
{
i.Id,
i.Name,
i.Order
} into g
到
group i by new
{
i.Id,
i.Name,
} into g
我想我也将最后一个表达式重写为
Order = g.OrderByDescending(xx => xx.Order).First().Order
主要是因为我认为它更容易阅读,但生成的SQL也可能更有效。但这只是个人喜好,任何性能差异都可以通过SQL Profiler进行验证。
您仍然有5行的原因是因为您的组通过组合的顺序不同。如果你想用原来的查询,或者用order by来得到最大的order,这就是查询。
var items = (from i in db.products
group i by new
{
i.Id,
i.Name
} into g
select new
{
g.Key.Id,
g.Key.Name,
Order = g.Where(d => d.Order == g.Max(xx => xx.Order )).First().Order })