Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ到SQL,多表联接,生成的SQL缺少第二个内部联接_C#_Linq_Linq To Sql - Fatal编程技术网

C# LINQ到SQL,多表联接,生成的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]

有人能告诉我为什么生成的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].[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)