[英]SQL query to Linq Lambda Expression - Join same table with group condition
[英]Convert SQL to Lambda Linq Expression with Inner Join on multiple condition
如何將此 SQL 轉換為 Lambda 表達式:
SELECT L.LotNo,
L.ProcessCode,
L.ProcessName,
L.MachineNo,
M.MaterialLotNo,
M.MaterialName,
M.StartTime,
M.EndTime
FROM LotProgress L
INNER JOIN MaterialMount M
ON (M.MachineNo = L.MachineNo OR M.MachineNo =
(SELECT ParentMachineNo FROM Machine WHERE MachineNo = L.MachineNo))
AND (L.StartTime <= M.EndTime OR M.EndTime IS NULL)
AND (L.EndTime >= M.StartTime OR L.EndTime IS NULL)
我正在努力轉換內部連接的多重條件。 這是我所能做的:
var vewMaterialTrace = viewLotProgress
.Join(viewMaterialMount, a => a.MachineNo, b => b.MachineNo,
(a, b) => new viewMaterial
{
LotNo = a.LotNo,
ProcessCode = a.ProcessCode,
ProcessName = a.ProcessName,
MachineNo = a.MachineNo,
OpeGroupCode = b.OpeGroupCode,
OpeGroupName = b.OpeGroupName,
MaterialLotNo = b.MaterialLotNo,
MaterialName = b.MaterialName,
StartTime = b.StartTime,
EndTime = b.EndTime,
}).ToList();
我不確定我的代碼是否正確,但太長無法添加評論。 請試試
var result = context.LotProgress
.Join(context.MaterialMount,
l => l.MachineNo,
m => m.MachineNo,
(l, m) => new { l, m })
.Where(x => x.l.MachineNo == x.m.MachineNo || x.m.MachineNo == context.Machine.FirstOrDefault(y => y.MachineNo == x.l.MachineNo).ParentMachineNo)
.Where(x => x.l.StartTime <= x.m.EndTime || x.m.EndTime == null)
.Where(x => x.l.EndTime >= x.m.StartTime || x.l.EndTime == null)
.Select(x => new
{
LotNo = x.l.LotNo,
ProcessCode = x.l.ProcessCode,
ProcessName = x.l.ProcessName,
MachineNo = x.l.MachineNo,
MaterialLotNo = x.m.MaterialLotNo,
MaterialName = x.m.MaterialName,
StartTime = x.m.StartTime,
EndTime = x.m.EndTime
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.