Linq to Entities 循环左外连接

Linq to Entities cycling left outer joins

我对 Linq to entities 有以下问题。

示意图:

Linq to entities 查询(尚未完成):

from a in Anlaesse 
join b in Beurteilung on a.AnlassID equals b.AnlassID into ab 
from b in ab.DefaultIfEmpty() 
join r in Rangliste on a.AnlassID equals r.AnlassId 
join p in Pony on r.PonyId equals p.PonyID into rp 
from p in rp.DefaultIfEmpty() 
where a.AnlassID == 67 
select new 
    {         
    BeurteilungId = b.BeurteilungID == null ? 0 : b.BeurteilungID, 
    PonyID = p.PonyID == null ? 0 : p.PonyID, 
    Name = p.Name, 
    PonyName1 = r.PonyName1, 
    AnlassId = a.AnlassID == null ? 0 : a.AnlassID 
    } 

生成SQL:

SELECT 
[Extent1].[AnlassID] AS [AnlassID], 
CASE WHEN ([Extent2].[BeurteilungID] IS NULL) THEN 0 ELSE 
[Extent2].[BeurteilungID] END AS [C1], 
CASE WHEN ([Extent4].[PonyID] IS NULL) THEN 0 ELSE [Extent4].[PonyID] END
AS [C2], 
[Extent4].[Name] AS [Name], 
[Extent3].[PonyName1] AS [PonyName1] 
FROM    [sspv].[Anlaesse] AS [Extent1] 
LEFT OUTER JOIN [sspv].[Beurteilung] AS [Extent2] ON [Extent1].[AnlassID] 
= [Extent2].[AnlassID] 
INNER JOIN [sspv].[Rangliste] AS [Extent3] ON [Extent1].[AnlassID] = 
[Extent3].[AnlassId] 
LEFT OUTER JOIN [sspv].[Pony] AS [Extent4] ON [Extent3].[PonyId] =  
[Extent4].[PonyID] 
WHERE 67 = [Extent1].[AnlassID] 

问题是我无法在 Pony 和 Beurteilung 之间添加左外连接,因为所有表都已经 "used" 在我的查询中。没有这个结果是错误的,因为它 Returns 每个 Pony all Beurteilung.

假设您要左联 PonyBeurteilung。假设两者都有 PonyId 属性。像这样的子句将充当内部连接:

where p.PonyId == b.PonyId

像这样的子句将充当左连接。

where b == null || p.PonyId == b.PonyId

但是,您发现这很难,因为看起来您确实没有正确使用 Entity Framework。您是否映射了任何导航属性或集合?如果您还没有添加它们,因为这是 EF 的重点。如果你有那么你就不需要使用内部或左连接;你只是遍历导航属性。