如何在实体框架中查询空值?我想执行这样的查询 var result = from entry in table where entry.something == null select entry;并得到一个IS NULL生成。编辑:在前两个答案后,我觉得有必要澄清我正在使用实体框架而不是Linq to SQL。object.Equals()方法似乎不适用于EF。编辑2:上述查询按预期工作。它正确生成IS NULL。然而,我的生产代码是value = null;var result = from entry in table where entry.something == value select entry;并且生成的SQL是something = @p; @p = NULL。似乎EF正确地转换了常量表达式,但是如果涉及变量,它就像正常比较一样处理它。实际上是有道理的。我会结束这个问题
3 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
Linq-to-SQL的解决方法:
var result = from entry in table where entry.something.Equals(value) select entry;
Linq-to-Entities的解决方法(哎哟!):
var result = from entry in table where (value == null ? entry.something == null : entry.something == value) select entry;
这是一个令人讨厌的虫子,几次咬我。 如果此错误也影响了您,请访问UserVoice上的错误报告,并让Microsoft知道此错误也会影响您。
编辑: 此错误正在EF 4.5中修复!感谢大家提出这个错误!
为了向后兼容,它将选择加入 - 您需要手动启用设置才能entry == value
工作。还没有关于这个设置是什么的消息。敬请关注!
编辑2: 根据EF团队的这篇文章,这个问题已经在EF6中得到修复!哇噢!
我们更改了EF6的默认行为以补偿三值逻辑。
这意味着依赖于旧行为的现有代码(null != null
但仅在与变量进行比较时)将需要更改为不依赖于该行为,或者设置UseCSharpNullComparisonBehavior
为false以使用旧的行为。
白板的微信
TA贡献1883条经验 获得超3个赞
从Entity Framework 5.0开始,您可以使用以下代码来解决您的问题:
public abstract class YourContext : DbContext{ public YourContext() { (this as IObjectContextAdapter).ObjectContext.ContextOptions.UseCSharpNullComparisonBehavior = true; }}
这应该可以解决您的问题,因为实体Framerwork将使用'C#like'null比较。
- 3 回答
- 0 关注
- 343 浏览
添加回答
举报
0/150
提交
取消