为什么 EF6 LINQ 没有为空字符串变量比较生成正确的 "is null" SQL?
Why EF6 LINQ does not generate proper "is null" SQL for null string variable comparison?
我们有一个基于 EDMX 的 EF6 应用程序,我们想在其中 运行 像这样的 LINQ 查询。
string category = ... // comes from somewhere and equals to null
context.Product.Where(e => e.Category == category).ToArray();
我看到的问题是生成的 SQL 在 where 子句中包含一个 [table].[Category] = @p...
,而不管变量 category
是否为 null
。所以在一天结束时,如果变量是 null
,查询 return 没有结果,而不是生成正确的 is null
条件和 return 正确的行。
我已经用显式 e => e.Category == null
表达式进行了测试,它确实按预期生成了 is null
。
我还检查了 EDMX 和 SQL,相应的 Category
列在这两个地方确实可以为空,所以这可能不是问题所在。
如有任何帮助,我们将不胜感激。
尝试将 context.Configuration.UseDatabaseNullSemantics
设置为 false
。这是影响上述行为的 属性。
查看文档here
我们有一个基于 EDMX 的 EF6 应用程序,我们想在其中 运行 像这样的 LINQ 查询。
string category = ... // comes from somewhere and equals to null
context.Product.Where(e => e.Category == category).ToArray();
我看到的问题是生成的 SQL 在 where 子句中包含一个 [table].[Category] = @p...
,而不管变量 category
是否为 null
。所以在一天结束时,如果变量是 null
,查询 return 没有结果,而不是生成正确的 is null
条件和 return 正确的行。
我已经用显式 e => e.Category == null
表达式进行了测试,它确实按预期生成了 is null
。
我还检查了 EDMX 和 SQL,相应的 Category
列在这两个地方确实可以为空,所以这可能不是问题所在。
如有任何帮助,我们将不胜感激。
尝试将 context.Configuration.UseDatabaseNullSemantics
设置为 false
。这是影响上述行为的 属性。
查看文档here