Entity framework 实体框架中的组和和

Entity framework 实体框架中的组和和,entity-framework,select,group-by,sum,linq-to-entities,Entity Framework,Select,Group By,Sum,Linq To Entities,我想为每个客户选择订单项目的所有(已付)价格之和。 下面是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; 我不知道如

我想为每个客户选择订单项目的所有(已付)价格之和。 下面是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

(逗号用作小数点..因为价格是十进制值)

您的示例结果似乎与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),
            }

再次非常感谢。你是我的储蓄者:)为什么看起来不匹配?选择c.name,SUM()->这样会有name和一些小数。@quin61-没问题。SQL命令将产生两列(名称、总和)。在您的示例中,似乎有3列(名称、编号、编号)。除非我误解了逗号的用法,因为逗号是小数点。现在我明白了,这有点令人困惑。我会编辑的post@quin61-这是有道理的。感谢您的澄清。您将如何在OrderItems上进行左联接,然后是总和?因此,即使客户没有0的订单,我也会得到他们。简单连接做内部连接,所以如果没有订单,也没有客户。