【问题标题】:GROUP and SUM in Entity Framework实体框架中的 GROUP 和 SUM
【发布时间】:2012-05-06 04:41:53
【问题描述】:

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

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

【问题讨论】:

    标签: entity-framework select group-by sum linq-to-entities


    【解决方案1】:

    您的示例结果似乎与您的 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() -> 所以会有名字和一些小数。
    • @quin61 - 没问题。 SQL 命令将产生两列(名称、总和)。在您的示例中,似乎有 3 列(名称、编号、编号)。除非我误解了逗号的用途
    • 逗号用作小数点。现在我明白了——这有点令人困惑。我将编辑该帖子
    • @quin61 - 这是有道理的。谢谢你的澄清。
    • 您将如何对 OrderItems 和 SUM 进行 LEFT JOIN?因此,即使客户没有总和为 0 的订单,我也会得到客户。简单连接会进行 INNER JOIN,所以如果没有订单,也没有客户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多