0

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 の商品が含まれます。また、OP のトランザクションの金額を含む Total という名前のフィールドがあります。
2. LPB_OP は、LPB と OP の間のコネクタです。3. LPB_Detail には、LPB の商品が含まれます。また、LPB でのトランザクションの金額を含む Total という名前のフィールドがあります。

これらの合計、isnull、および左結合の問題を解決できる linq 構文はありますか?

特に行:
left join LPB d on c.ID_Ps_LPB = d.ID_Ps_LPB and d.ModifyStatus != 'D'

4

1 に答える 1

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;
}
于 2013-02-01T09:03:32.383 に答える