LINQ Left Join 3 tables with OR 运算符
LINQ Left Join 3 tables with OR operator
我有这个 SQL 查询:
SELECT * FROM [CMS_MVC_PREPROD].[dbo].[T_MEMBER] m
left outer join [CMS_MVC_PREPROD].[dbo].[T_COMPANY] c
ON m.Company_Id = c.Id
left outer join [CMS_MVC_PREPROD].[dbo].[T_ADRESSE] a
ON m.Id = a.Member_Id OR a.Company_Id = c.Id
但我无法将其翻译成 Linq
我尤其对这行有一些问题:
ON m.Id = a.Member_Id OR a.Company_Id = c.Id
编辑:我试试 Ehsan Sajjad 的这个查询
from m in db.Member
join c in db.T_Company on m.Company_Id equals c.Id into a
from c in a.DefaultIfEmpty()
from ta in db.T_Address
where m.Id == ta.Member_Id || ta.Company_Id == c.Id
但只有 returns 位成员有地址,我想要所有成员。也许它会与一个完整的连接一起工作
提前致谢
LINQ 只支持直接等值连接。您必须使用不同的查询模式:
from m in db.MEMBER
//add join to "c" here
from a in (
from a db.ADRESSE
where m.Id == a.Member_Id || a.Company_Id == c.Id
select a).DefaultIfEmpty()
select new { m, a }
只是一个草图。诀窍是在子查询上使用 DefaultIfEmpty
。 L2S 和 EF 都可以将其转换为 OUTER APPLY
,相当于 LEFT JOIN
.
你可以这样写让它工作:
from m in db.Member
join c in db.T_Company on m.Company_Id equals c.Id into a
from c in a.DefaultIfEmpty()
from ta in db.T_Address
where m.Id == ta.Member_Id || ta.Company_Id == c.Id
我有这个 SQL 查询:
SELECT * FROM [CMS_MVC_PREPROD].[dbo].[T_MEMBER] m
left outer join [CMS_MVC_PREPROD].[dbo].[T_COMPANY] c
ON m.Company_Id = c.Id
left outer join [CMS_MVC_PREPROD].[dbo].[T_ADRESSE] a
ON m.Id = a.Member_Id OR a.Company_Id = c.Id
但我无法将其翻译成 Linq
我尤其对这行有一些问题:
ON m.Id = a.Member_Id OR a.Company_Id = c.Id
编辑:我试试 Ehsan Sajjad 的这个查询
from m in db.Member
join c in db.T_Company on m.Company_Id equals c.Id into a
from c in a.DefaultIfEmpty()
from ta in db.T_Address
where m.Id == ta.Member_Id || ta.Company_Id == c.Id
但只有 returns 位成员有地址,我想要所有成员。也许它会与一个完整的连接一起工作
提前致谢
LINQ 只支持直接等值连接。您必须使用不同的查询模式:
from m in db.MEMBER
//add join to "c" here
from a in (
from a db.ADRESSE
where m.Id == a.Member_Id || a.Company_Id == c.Id
select a).DefaultIfEmpty()
select new { m, a }
只是一个草图。诀窍是在子查询上使用 DefaultIfEmpty
。 L2S 和 EF 都可以将其转换为 OUTER APPLY
,相当于 LEFT JOIN
.
你可以这样写让它工作:
from m in db.Member
join c in db.T_Company on m.Company_Id equals c.Id into a
from c in a.DefaultIfEmpty()
from ta in db.T_Address
where m.Id == ta.Member_Id || ta.Company_Id == c.Id