C# LINQ到SQL,多表联接,生成的SQL缺少第二个内部联接
有人能告诉我为什么生成的SQL不包含第二个内部联接吗?在WHERE子句中,它似乎已替换为空检查?我不清楚为什么第二个内部联接不在生成的SQL中 C#代码: 生成的SQL:C# LINQ到SQL,多表联接,生成的SQL缺少第二个内部联接,c#,linq,linq-to-sql,C#,Linq,Linq To Sql,有人能告诉我为什么生成的SQL不包含第二个内部联接吗?在WHERE子句中,它似乎已替换为空检查?我不清楚为什么第二个内部联接不在生成的SQL中 C#代码: 生成的SQL: SELECT [Extent2].[Id] AS [Id] FROM [dbo].[Orders] AS [Extent1] INNER JOIN [dbo].[Cycles] AS [Extent2] ON [Extent1].[Id] = [Extent2].[OrderId] WHERE ([Extent2]
SELECT
[Extent2].[Id] AS [Id]
FROM [dbo].[Orders] AS [Extent1]
INNER JOIN [dbo].[Cycles] AS [Extent2] ON [Extent1].[Id] = [Extent2].[OrderId]
WHERE ([Extent2].[CalendarId] IS NOT NULL) AND ( CAST( [Extent1].[UnitId] AS int) = @p__linq__0) AND ( CAST( [Extent1].[CompanyId] AS int) = @p__linq__1)
看起来查询生成器正在优化您的查询。
由于在查询中没有从日历表中选择(或在where子句中使用)任何字段,因此在订单表和周期表之间只进行一次联接。检查非空外键可能比在不使用任何字段的表上联接要快。您完全正确,我使用另一个字段选择进行了测试,结果与预期一样。谢谢你的快速回复。
SELECT
[Extent2].[Id] AS [Id]
FROM [dbo].[Orders] AS [Extent1]
INNER JOIN [dbo].[Cycles] AS [Extent2] ON [Extent1].[Id] = [Extent2].[OrderId]
WHERE ([Extent2].[CalendarId] IS NOT NULL) AND ( CAST( [Extent1].[UnitId] AS int) = @p__linq__0) AND ( CAST( [Extent1].[CompanyId] AS int) = @p__linq__1)