c# - Entity Framework Linq、Left Join 和 Group with SUM 和 Count

标签 c# mysql entity-framework linq entity

在将 SQL 转换为 Linq 方面我需要一些帮助。这在 MySQL 中非常简单...

Table: customers
ID  Name    
1   Bill
2   John

Table: purchases
ID  CustomerID  CompletedTransaction
1   1           False
2   2           True
3   1           True
4   1           True


    SELECT  c.ID
        c.Name,
        COUNT(p.ID) AS TotalPurchases,
        SUM(CASE WHEN p.CompletedTransaction = TRUE THEN 1 ELSE 0 END) AS                       TotalCompleted
    FROM customers c
    LEFT JOIN purchases p ON c.ID = p.CustomerID
    GROUP BY c.ID

Expected Result:
1, Bill, 3, 2
2, John, 1, 1

我看过一些关于如何在 Linq 中实现左联接的示例,但我不确定如何将 SUM 和 Count 包含到其中。我在 Linq 中看到过示例,其中返回的字段是从组键中选择的。这是否意味着如果我在客户表中有更多字段(例如我想返回的地址和其他联系方式),我必须将它们包含在连接中才能选择它们?希望这是有道理的。感谢任何可能为我指明正确方向的帮助或链接。

谢谢

最佳答案

var answer = (from c in db.customers 
              join p in db.purchases 
              on c.ID = p.CustomerID into subs
              from sub in subs.DefaultIfEmpty()
              group sub by new { c.ID, c.Name } into gr
              select new {
                  gr.Key.ID,
                  gr.Key.Name,
                  Total = gr.Count(x => x != null),
                  CountCompleted = gr.Count(x => x != null && x.CompletedTransaction)
              }).ToList();

关于c# - Entity Framework Linq、Left Join 和 Group with SUM 和 Count,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46943961/

相关文章:

php - PDO lastInsertId() 在使用重复键更新时返回 0?

mysql - excel csv 到 mysql-numbers >1000 变为 1.00

mysql - Rails 将主 ID 更改为 64 位 bigint

c# - EntityFramework.sqlServerCompact和存储库模式MVVM

c# - Asp.net 核心。使用类型参数配置 IOptions 方法(非通用)

javascript - 如何在使用多个集合的 DocumentDB 中使用存储过程

c# - 如何修复 Entity Framework Core 错误 "Value cannot be null. Parameter name: frameworkName"?

c# - providerName ="System.Data.EntityClient"的默认超时

c# - 如何从列表类型中获取模板类型?

c# - mysql外键错误