题
我试图解决在LINQ的“组间最大”的问题。首先,我有一个数据库使用实体框架具有如下结构建模:
Customer:
---------
CustomerID : Int32
Name : String
Order:
-------
OrderID : Int32
CustomerID : Int32
Total : Decimal
这给我导航从客户到她的订单,订单的所有者。
我试图创建一个LINQ查询,让我找到了前10名客户的订单在数据库中。简单的情况是很容易想出:
var q = (
from order in _data.Orders // ObjectQuery<Order>
orderby order.Amount descending select order
).Take(10);
不过,我想只显示独特的客户在此列表中。我还是有点新的LINQ,但是这是我想出:
var q = (
from order in _data.Orders // ObjectQuery<Order>
group order by order.Customer into o
select new {
Name = o.Key.Name,
Amount = o.FirstOrDefault().Amount
}
).OrderByDescending(o => o.Amount).Take(10);
这似乎是工作,但我不知道这是最好的办法。具体来说,我想知道这种查询的性能对一个非常大的数据库。此外,使用FirstOrDefault
方法选自查询看起来有点奇特...
任何人都可以提供一个更好的方法,或某种保证,这是正确的?
解决方案
您可以这样做:
var q = (
from order in _data.Orders // ObjectQuery<Order>
orderby order.Amount descending select order
).Distinct().Take(10);
我通常会查看生成的SQL,看看什么是最好的。
其他提示
Customer
.Select(c=>new {Order= c.Orders.OrderByDescending(o=>o.Total).First()})
.OrderByDescending(o=>o.Total)
.Take(10);
不隶属于 StackOverflow