SQL в Linq с помощью SUM, ISNULL и Left Join: как сделать хороший запрос linq?
У меня проблема с преобразованием синтаксиса SQL в LINQ. Это запрос у меня есть.
select ISNULL(Sum(b.Total),0) as 'TotalOP', isnull(Sum(e.Total),0) as 'TotalLPB',
isnull(Sum(b.Total),0) - isnull(Sum(e.Total),0) as 'Difference'
from OP a
left join OP_Detail b on a.ID_Ps_OP = b.ID_Ps_OP
left join LPB_OP c on a.ID_Ps_OP = c.ID_Ps_OP
left join LPB d on c.ID_Ps_LPB = d.ID_Ps_LPB and d.ModifyStatus != 'D'
left join LPBDetail e on d.ID_Ps_LPB = e.ID_Ps_LPB
where a.ModifyStatus != 'D'
Запрос хорошо работает в SQL.
Что касается информации:
1. OP_Detail содержит товары OP. и у него есть поле с именем Total, которое содержит сумму транзакции в OP.
2. LPB_OP - это разъем между LPB и OP. 3. LPB_Detail содержит товары LPB. и у него есть поле с именем Total, которое содержит сумму транзакции в LPB.
Есть ли какой-либо синтаксис linq, который может принимать эти суммы, ошибки и проблемы с левым соединением?
Особенно линия:
присоединиться к LPB d на c.ID_Ps_LPB = d.ID_Ps_LPB и d.ModifyStatus!= 'D'
1 ответ
Может быть, вы можете попробовать что-то вроде этого:
var lstQuery =
(from A in OP
from B in OP_Detail
from C in LBP_OP
from D in LPB
from E in LPBDetail
where
A.ID_Ps_OP = B.ID_Ps_OP &&
A.ID_Ps_OP = C.ID_Ps_OP &&
((C.ID_Ps_LPB = D.ID_Ps_LPB) && (D.ModifyStatus != 'D')) &&
D.ID_Ps_LPB = E.ID_Ps_LPB
select new
{
A, B, C, D, E
}).ToList();
double dTotalOP = 0;
double dTotalLPB = 0;
double dDifference = 0;
foreach (var record in lstQuery)
{
dTotalOp += record.B == null ? 0 : record.B.Total;
dTotalLPM += record.E == null ? 0 : record.E.Total;
dDifference += dTotalOp - dTotalLPM;
}