为了账号安全,请及时绑定邮箱和手机立即绑定

如何在实体框架中查询空值?

如何在实体框架中查询空值?

慕神8447489 2019-07-26 16:50:04
如何在实体框架中查询空值?我想执行这样的查询   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以使用旧的行为。


查看完整回答
反对 回复 2019-07-26
?
白板的微信

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比较。


查看完整回答
反对 回复 2019-07-26
  • 3 回答
  • 0 关注
  • 328 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信