簡體   English   中英

在多個條件下使用內部連接將 SQL 轉換為 Lambda Linq 表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM