我试图解决在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);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top