C# 在LINQ中使用左外部联接和内部联接联接联接4个表

C# 在LINQ中使用左外部联接和内部联接联接联接4个表,c#,.net,linq,linq-to-entities,C#,.net,Linq,Linq To Entities,LINQPad屏幕截图,其中TAanlysis是T2表,我可以展开以查看详细信息 我有四张桌子。其中三个需要与left连接,而两个需要与inner连接 以下是我试图在LINQ中重新编写的SQL代码: select t1.*,t2.*,t3.* from t1 left outer join t2 on t1.column1=t2.column1 left outer join t3 on t2.column1=t3.column1 INNER join t4 on t2.column1=t4.c

LINQPad屏幕截图,其中TAanlysis是T2表,我可以展开以查看详细信息

我有四张桌子。其中三个需要与left连接,而两个需要与inner连接

以下是我试图在LINQ中重新编写的SQL代码:

select t1.*,t2.*,t3.*
from t1
left outer join t2 on t1.column1=t2.column1
left outer join t3 on t2.column1=t3.column1
INNER join t4 on t2.column1=t4.column1
where t3.column2=x**
有人能帮我用LINQ写这样的查询吗?

我在.NET中尝试了以下LINQ查询,它在后端生成不同的SQL查询:

from prsn in db.T1
join co in db.T2 on prsn.Id equals co.Id into ps1
from y1 in ps1.DefaultIfEmpty()
join tproject in db.T3 on y1.Id equals prod.Id into ps2
from y2 in ps2.DefaultIfEmpty()
join res in db.T4 on y1.Id equals res.Id
where y2.ID == x 
select prsn;[![enter image description here][1]][1]
select filter1.*
from (Select t1.* from t1 inner join t2 on t1.Id=t2.Id
      left outer join t3 on t2.Id = t3.Id)as filter1
inner join t4 on filter1.Id= t4.Id
where filter1.Id= x
在后端形成的SQL查询:

from prsn in db.T1
join co in db.T2 on prsn.Id equals co.Id into ps1
from y1 in ps1.DefaultIfEmpty()
join tproject in db.T3 on y1.Id equals prod.Id into ps2
from y2 in ps2.DefaultIfEmpty()
join res in db.T4 on y1.Id equals res.Id
where y2.ID == x 
select prsn;[![enter image description here][1]][1]
select filter1.*
from (Select t1.* from t1 inner join t2 on t1.Id=t2.Id
      left outer join t3 on t2.Id = t3.Id)as filter1
inner join t4 on filter1.Id= t4.Id
where filter1.Id= x
我在.NET中尝试了上面的LINQ查询,它在后端生成不同的SQL查询。如果我遗漏了什么,请告诉我


注意:从3个表中选择所有列。

您是否已经尝试了一些方法?通常,您不能期望一对一的LINQ查询到SQL查询转换。问题是你是否得到了预期的结果?顺便说一句,SQL查询看起来很奇怪-按照它的编写方式,我认为
内部连接
将有效地将第一个
左连接
转换为
内部连接
,而
WHERE
条件将对第二个
左连接
执行相同的操作,因此,如果所有连接都是
internal
@IvanStoev正确的,那么在请求帮助将其转换为LINQ之前,您需要解决SQL中的问题。按现状,您的所有联接都是隐式内部联接。@伊万斯托耶夫谢谢您的评论。@伊万斯托耶夫谢谢您的评论。上面的Sql查询为我提供了所需的结果(其中表1和表2是外键链接的,表1和表3是外键链接的)。执行上面的Sql查询时,linq查询为我提供了表2和表3的虚拟集合为“null”的结果以及表1的其他详细信息。如果我得到表2和表3数据的虚拟集合,它对我有效。