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个结果。谢谢你

Max的Linq分组不起作用

变化

             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     })