我有一个产品表
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个结果。 谢谢
答案 0 :(得分:3)
更改
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验证。
答案 1 :(得分:0)
您仍然有5行的原因是因为组合的顺序与您的组不同。如果您想使用原始订单,或者使用订单来获取最大订单,那么这将是查询。
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 })