gpt4 book ai didi

linq - 一次调用在同一张 table 上进行 2 次左连接

转载 作者:行者123 更新时间:2023-12-04 22:55:51 24 4
gpt4 key购买 nike

我有以下表格:

用户:

  • userId , userFirstName , userLastName .

  • 持有账单:
  • bEntityID , CarrierOID , PayerOID , holdTYPE , createUserID .

  • 运营商:
  • carrierOID , carrierName .

  • 付款人:
  • payerOID , payerName .

  • 我希望代码保存在新实体中
    holdBilling => new
    {
    FirstName, LastName, CarrierName, PayerName
    }

    这些实体之一具有付款人或承运人值(value)(不能同时具有)。基本上我想通过一次调用在同一张 table 上进行 2 个左连接。这将是对我有用的 SQL 查询。
    SELECT TOP 1000 [ID]
    ,[bEntityID]
    ,c.carrierID
    ,c.carrierName
    ,p.payerID
    ,p.payerName
    ,[holdType] ( this is "C" for carrier and "P" for payer )
    FROM .[dbo].[holdBilling] hb
    left join dbo.payer p on hb.payerID = p.payerID
    left join dbo.carrier c on hb.carrierID = c.carrierID
    where [bEntityID] = 378

    我找到的临时解决方案是获取所有运营商的列表
     var listC = (from hold in holdBilling
    join u in Users on hold.createUserID equals u.userID
    join c in carrier.DefaultIfEmpty() on hold.carrierID equals c.carrierID
    select new
    {
    Elem = hold,
    FName = u.userFirstName,
    LName = u.userLastName,
    Carrier = c.carrierName,
    Payer = ""
    }).ToList();

    一个给所有付款人
     select new
    {
    Elem = hold,
    FName = u.userFirstName,
    LName = u.userLastName,
    Carrier = "",
    Payer = p.payerName
    }).ToList();

    并合并两者,我相信必须有一个解决方案可以在一个查询中同时完成。

    最佳答案

    可能是这样的:

    var listC = (
    from hb in holdBilling
    from p in payer.Where(a=>a.payerID==hb.payerID).DefaultIfEmpty()
    from c in carrier.Where(a=>a.carrierID=hb.carrierID).DefaultIfEmpty()
    where hb.bEntityID==378
    select new
    {
    hb.bEntityID,
    c.carrierID,
    c.carrierName,
    p.payerID,
    p.payerName,
    holdType=(payer==null?"P":"C")
    }
    ).Take(1000)
    .ToList();

    关于linq - 一次调用在同一张 table 上进行 2 次左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9927865/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com