【问题标题】:How do I do a comparison in the WHERE clause with a value that is nullable?如何在 WHERE 子句中与可为空的值进行比较?
【发布时间】:2021-05-27 22:13:57
【问题描述】:

在我的 LINQ 查询中,我正在处理一个表,该表的值 id 是可为空的 int。我在查询之外有一个值 currentId,它是一个 int。我需要对表进行查询以获取 id.Equals(currentId) 所在的条目。但它一直给我一个 System.NotSupportedException。

我和我的搭档正在努力寻找解决这个问题的方法,因为我们在谷歌上搜索到的所有帖子都是可空值不是来自条目本身的情况。

我们的代码大致是这样的: var val = (from row in db.OurTable where row.id.Equals(currentId)).SingleOrDefault();

【问题讨论】:

  • 能否请您添加错误的全文?你也试过row.id == currentId吗?
  • 我已经尝试使用 == 运算符代替。我得到的错误如下(有一些修改):System.NotSupportedException: 'LINQ to Entities does not recognize the method 'OurTable get_Item(Int32)' method, and this method cannot be translated into a store expression.' 在这种情况下,OurTable 指的是它的类名。
  • 这个错误信息很奇怪...如果row.id是int,合理的错误信息应该是'LINQ to Entities不识别方法'Int32 get_Item( Int32)' 而不是 OurTable,您能再检查一下 row.id 的类型吗?
  • 仔细检查,它的类型是 Nullable
  • 您能否添加OurTable的定义。

标签: asp.net-mvc linq entity-framework-6


【解决方案1】:

我想我修好了?我的代码运行并且似乎有效。似乎它与我遗漏的 WHERE 子句中的布尔比较有关,它应该总是返回 true。该比较的具体内容是检查 results[i] 的另一个属性是否等于自身。

我添加它以匹配我老板给我的查询,但它似乎导致了错误。抱歉,这是一个愚蠢的问题。

【讨论】:

    猜你喜欢
    • 2018-12-22
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2016-03-24
    相关资源
    最近更新 更多