C# 如何将leftouterjoin查询转换为LINQ
我有一个包含innerjoin和leftouter连接的sql查询,mr很难将其转换为LINQC# 如何将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
选择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