LINQ查詢LEFT OUTER JOIN
from rc in context.RC
join r in context.R on rc.RId equals r.Id
join c in context.C on rc.CId equals c.Id
join f in context.F on rc.FId equals f.Id into fg
from f in fg.DefaultIfEmpty()
join e in context.E on rc.EId equals e.Id into eg
from e in eg.DefaultIfEmpty()
生成的SQL
SELECT *
FROM [dbo].[RC] AS [Extent1]
INNER JOIN [dbo].[R] AS [Extent2] ON [Extent1].[RId] = [Extent2].[Id]
INNER JOIN [dbo].[C] AS [Extent3] ON [Extent1].[CId] = [Extent3].[Id]
INNER JOIN [dbo].[F] AS [Extent4] ON [Extent1].[FId] = [Extent4].[Id]
INNER JOIN [dbo].[E] AS [Extent5] ON [Extent1].[EId] = [Extent5].[Id]
我想要得到的是
SELECT *
FROM [dbo].[RC] AS [Extent1]
INNER JOIN [dbo].[R] AS [Extent2] ON [Extent1].[RId] = [Extent2].[Id]
INNER JOIN [dbo].[C] AS [Extent3] ON [Extent1].[CId] = [Extent3].[Id]
LEFT JOIN [dbo].[F] AS [Extent4] ON [Extent1].[FId] = [Extent4].[Id]
LEFT JOIN [dbo].[E] AS [Extent5] ON [Extent1].[EId] = [Extent5].[Id]
不知道是什麼我是密西根嗎?納克在我的LINQ查詢
代碼的屏幕快照
更新
基於由@GertArnold評論,RC-F
(表)和RC-E
(表)是N-1
協會,其中RC
應該持有F
的有效身份證密鑰參考,但在RC
表F
ID爲零,當我做inner join
時,它跳過數據。
所以現在我怎麼能強迫實體框架/ LINQ產生LEFT JOIN
語法,而不改變我的數據庫架構
在lambda語法,'Join'指'內Join'和'GroupJoin'是'左外Join' –
LINQ查詢是精細和應產生'LEFT JOIN'。你在用什麼ORM? –
@IvanStoev實體框架6 – HaBo