簡體   English   中英

Max的Linq分組不起作用

[英]Linq grouping by Max not working

我有一張產品表

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM