C# 如何将leftouterjoin查询转换为LINQ

C# 如何将leftouterjoin查询转换为LINQ,c#,sql,linq,C#,Sql,Linq,我有一个包含innerjoin和leftouter连接的sql查询,mr很难将其转换为LINQ 选择project.ID、project.No、project.Name、, APPLN.Id,APPLN.Name,SAR.Name 从相位作用相位(NOLOCK) 将一个项目项目与(NOLOCK)在阶段进行内部连接。Id=project.Id 将应用程序APPLN与project.AppId=APPLN.Id上的(NOLOCK)进行内部连接 左外连接主控台与(NOLOCK)ON phase.amI

我有一个包含innerjoin和leftouter连接的sql查询,mr很难将其转换为LINQ

选择project.ID、project.No、project.Name、,
APPLN.Id,APPLN.Name,SAR.Name
从相位作用相位(NOLOCK)
将一个项目项目与(NOLOCK)在阶段进行内部连接。Id=project.Id
将应用程序APPLN与project.AppId=APPLN.Id上的(NOLOCK)进行内部连接
左外连接主控台与(NOLOCK)ON phase.amId=主控台Id
SAR.ID=master.Ref\u ID上带有(NOLOCK)的内部连接参考SAR
其中,phase.ID=123

它有点混乱,因为它包含“左外连接”。有人请帮忙。

我给你一个关于LINQ中左外连接的基本概念

var线=以db为单位的p。相位效应
在m.Id等于的db.Master中加入m p、 到了下午 其中p.ID==123 来自p_m.DefaultIfEmpty()中的m 选择新的{p.ID}


现在,您可以根据您的逻辑将其转换得更多。。。或者查询……

可能是这样的:

var result=(
        from phase in db.Phasefact
        join project in db.AProject
            on phase.Id equals project.ID
        join APPLN in db.Application 
            on project.AppId equals APPLN.Id
        //Left join
        from master in db.Master
            .Where(a=>a.Id==phase.amId).DefaultIfEmpty()
        join SAR in db.Ref
            on SAR.ID equals master.Ref_Id
        where phase.ID == 123 
        select new
        {
            project.ID,
            project.No,
            project.Name,  
            APPLN.Id,
            APPLN.Name,
            SAR.Name
        }
    );
INNER JOIN Ref SAR WITH (NOLOCK) ON SAR.ID = master.Ref_Id
编辑

但是我没有得到
左连接
。为什么要使用
左联接
?在我看来,似乎您首先使用了
左连接

LEFT OUTER JOIN Master master WITH (NOLOCK) ON phase.amId = master.Id
然后是一个限制结果的连接,如下所示:

var result=(
        from phase in db.Phasefact
        join project in db.AProject
            on phase.Id equals project.ID
        join APPLN in db.Application 
            on project.AppId equals APPLN.Id
        //Left join
        from master in db.Master
            .Where(a=>a.Id==phase.amId).DefaultIfEmpty()
        join SAR in db.Ref
            on SAR.ID equals master.Ref_Id
        where phase.ID == 123 
        select new
        {
            project.ID,
            project.No,
            project.Name,  
            APPLN.Id,
            APPLN.Name,
            SAR.Name
        }
    );
INNER JOIN Ref SAR WITH (NOLOCK) ON SAR.ID = master.Ref_Id
这与执行以下操作相同:

INNER JOIN Master master WITH (NOLOCK) ON phase.amId = master.Id
INNER JOIN Ref SAR WITH (NOLOCK) ON SAR.ID = master.Ref_Id