Entity framework 将嵌套的T-SQL选择查询转换为linq
我尝试将以下SQL查询转换为LINQ查询:Entity framework 将嵌套的T-SQL选择查询转换为linq,entity-framework,linq,Entity Framework,Linq,我尝试将以下SQL查询转换为LINQ查询: SELECT CustomerId, SUM(Bills.BillAmount) AS BillAmountTotal, SUM(COALESCE(Pay.Paid, 0)) AS [Payments] FROM Bills LEFT OUTER JOIN (SELECT BillId, SUM(PaymentAmount) AS [Paid] FROM
SELECT
CustomerId,
SUM(Bills.BillAmount) AS BillAmountTotal,
SUM(COALESCE(Pay.Paid, 0)) AS [Payments]
FROM
Bills
LEFT OUTER JOIN
(SELECT
BillId,
SUM(PaymentAmount) AS [Paid]
FROM
BillPayments
GROUP BY
BillId) Pay ON Pay.BillId = Bills.Id
GROUP BY
CustomerId
我用以下代码解决了这个问题:
var pay = from p in db.BillPayments
group p by new { p.BillId } into g
select new
{
payKey = g.Key,
TotalPayments = g.Sum(p => p.PaymentAmount)
};
var query = from c in db.Customers
join b in db.Bills on c.Id equals b.CustomerId
join p in pay on b.Id equals p.payKey.BillId into cs
from xx in cs.DefaultIfEmpty()
group new { c, b, xx } by new { c.Name, c.MobilePhone, c.Id, c.CustomerCode } into g
select new
{
Received = g.Key,
TotalPayment = g.Sum(p => p.xx.TotalPayments == null ? 0 : p.xx.TotalPayments),
TotlalBilling = g.Sum(p => p.b.BillAmount),
GrandTotal = g.Sum(p => p.b.BillAmount) - g.Sum(p => p.xx.TotalPayments == null ? 0 : p.xx.TotalPayments)
};
请阅读标签说明并采取相应措施。另外,为了回答这个问题,展示你的课堂模型和你的第一次努力,这样我们就可以看到你在这个过程中遇到了什么困难。