Sql Linq到实体循环左外部联接
我对Linq to实体有以下问题 图表: Linq到实体查询(尚未完成): 生成的SQL:Sql Linq到实体循环左外部联接,sql,linq,linq-to-entities,Sql,Linq,Linq To Entities,我对Linq to实体有以下问题 图表: Linq到实体查询(尚未完成): 生成的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
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之间添加左侧外部联接,因为所有表都已在我的查询中“使用”。如果不这样做,结果是错误的,因为它会为每匹小马返回all Beurteilung。假设您想将
小马
左连接到Beurteilung
。假设两者都有一个PonyId
属性。这样的子句将充当内部联接:
where p.PonyId == b.PonyId
这样的子句将充当左连接
where b == null || p.PonyId == b.PonyId
然而,您发现这很难,因为看起来您并没有正确地使用实体框架。您是否映射了任何导航属性或集合?若你们还并没有添加它们,因为这是EF的一个点。如果有,那么就不需要使用内部联接或左联接;您只需遍历导航属性。是否尝试添加
where
子句以将小马
匹配到Beurteilung
?如果不知道您想要加入这两个实体的内容,就很难提供解决方案。谢谢您的回复。是的,我试过了,但它的行为类似于innerjoin,因此没有返回任何内容。结果Schoull将从Anlass和Pony处返回所有Rangliste以及详细信息(如果存在一匹小马和关于Beurteilung的详细信息,如果给定的Anlass存在一匹小马,并且这匹小马有一个Beurteilung。嗨,Tim,谢谢你的回复。就是这样!我不知道其中b==null | | p.PonyId==b.PonyId被解释为EF的左外连接。现在它似乎起作用了。是的,我知道某种奇怪的设计,但不幸的是s是我必须使用的传统数据库,不可能进行修改。您不需要修改数据库来添加导航属性。您需要修改实体框架上下文。
where b == null || p.PonyId == b.PonyId