C# 如何将此sql请求转换为Lambda表达式或LINQ

C# 如何将此sql请求转换为Lambda表达式或LINQ,c#,sql,entity-framework,linq,lambda,C#,Sql,Entity Framework,Linq,Lambda,如何将以下查询转换为lambda表达式或LINQ SELECT * FROM PrelevementClient as pc LEFT JOIN ContratIBAN AS ci ON ci.IDCMPT = pc.IDCMPT LEFT JOIN Contrat AS ctr ON ctr.NOCONTRAT = ci.NOCONTRAT WHERE pc.IDPRELEVEMENT = '111' AND DTPROCHAINPREL >= getdate() 困难在于有两个左连接

如何将以下查询转换为lambda表达式或LINQ

SELECT * FROM PrelevementClient as pc
LEFT JOIN ContratIBAN AS ci ON ci.IDCMPT = pc.IDCMPT
LEFT JOIN Contrat AS ctr ON ctr.NOCONTRAT = ci.NOCONTRAT
WHERE pc.IDPRELEVEMENT = '111'
AND DTPROCHAINPREL >= getdate()
困难在于有两个左连接。

希望它有帮助:

var query = from pc in Context.PrelevementClient
            join ci in Context.ContratIBAN on pc.IDCMPT equals ci.IDCMPT into ciLeft
            from ci in ciLeft.DefaultIfEmpty()
            join co in Context.Contrat on ci.nocontrat equals co.nocontrat into coLeft
            from co in coLeft.DefaultIfEmpty()
            where pc.idprelevement == "111" && pc.dtprochainprel >= DateTime.Today
            select new  
            {
              //bind what you want
              // and dont forget to manage if co||ci.property is null...
            }

每次“加入”后都有一个“来自”

在请求末尾将所有“from”分组会产生问题

 DateTime date = DateTime.Now.AddMonths(1);
        var prelevements = from pc in set.Where(s => s.DTPROCHAINPREL >= DateTime.Today && s.NOSOC == nosoc && s.DTPROCHAINPREL < date)
                           join ci in context.Set<ContratIBAN>().Where( g => g.PRELEVEMENTBCA == true) on pc.IDCMPT equals ci.IDCMPT into cileft
                          from ci in cileft.DefaultIfEmpty()
                           join co in context.Set<Contrat>() on ci.NOCONTRAT equals co.NOCONTRAT into coleft     
                          from co in coleft.DefaultIfEmpty()

我认为我们可以通过提供一个完整的查询来改进答案。第三行生成CS0103-名称“ci”在当前上下文中不存在,但仍然相同。你没抓住重点。进入ciLeft后,ci脱离了上下文。很难回答是否有实体对涉及的3个实体及其关系进行建模。