奇怪 SQL 使用 Entity Framework

Weird SQL using Entity Framework

我有一个应用程序在生产中使用 Entity Framework 和 SQL 服务器 运行 我是 运行 SQL 服务器分析器来识别慢 SQLs 来优化应用程序。我有一个复杂的场景,有 N 种可能的过滤选择,所以我使用 PredicateBuilder 来构建我的过滤器。

所以,我发现了一个奇怪的 SQL,我不知道它是由什么生成的:

SELECT
1 AS [C1],
CAST(NULL AS int) AS [C2],
CAST(NULL AS varchar(100)) AS [C3],
CAST(NULL AS varchar(1)) AS [C4],
CAST(NULL AS int) AS [C5],
CAST(NULL AS datetime) AS [C6]
FROM  ( SELECT 1 AS X ) AS [SingleRowTable1]
WHERE 1 = 0

知道是什么导致了这个问题吗?

当你有这样的 where 语句时,EF 会这样做:

list.Contains(x.Value)

并且此示例中的集合 "list" 是空的。你可能有这样的事情。