在Entity Framework中的GROUP和SUM

16

我想选择每个客户所有订单项目的(已支付)价格总和。

以下是SQL命令:

SELECT c.name,SUM(oi.price * oi.count) from customer c
JOIN order o ON c.id=o.customer_id
JOIN order_item oi ON o.id=oi.order_id
JOIN bill b ON b.id=oi.bill_id
WHERE b.payment_id is NOT null
GROUP by c.name;

我不知道如何在EF中实现这个。

John Smith  1500,2  
Allan Babel 202,0  
Tina Crown  3500,78

(逗号被用作小数点……因为价格是小数值)

1个回答

31

你的示例结果似乎与你的SQL命令不匹配,但我认为你正在寻找类似于以下内容:

var query = from c in context.Customers
            join o in context.Orders on c.id equals o.customer_id
            join oi in context.OrderItems on o.id equals oi.order_id
            join b in context.bill on oi.bill_id equals b.id
            where b.payment_id != null
            group oi by c.name into g
            select new
            {
              Name = g.Key,
              Sum = g.Sum(oi => oi.price * oi.count),
            }

非常感谢你,你是我的救星 :) 为什么似乎不匹配?SELECT c.name,SUM() -> 这样就会有名称和一些小数。 - quin16
@quin61 - 没问题。SQL命令将会产生两列(名称,总和)。在你的例子中似乎有3列(名称,数字,数字)。除非我误解了逗号的用法。 - Aducci
逗号被用作小数点。现在我明白了 - 这有点令人困惑。我会编辑那篇文章。 - quin16
你如何在OrderItems上执行LEFT JOIN,然后进行SUM操作?这样我就可以得到所有客户的信息,即使他们没有订单,也能得到总数为0的结果。简单的JOIN操作只会执行INNER JOIN,所以如果没有订单,就不会有客户信息。 - Lenard Bartha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接