在将 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/