c# - 如果只有一个可为空,则 Linq DateTime 表达式不会进行比较

标签 c# linq

我遇到了以下异常:

The binary operator GreaterThanOrEqual is not defined for the types 'System.Nullable`1[System.DateTime]' and 'System.DateTime'.

我从一个类属性中获取左边的表达式,它是一个可为空的日期时间变量,而我的右边正在使用

Expression.Constant(new Nullable<DateTime>(DateTime.Now))

然而,尽管将右侧表达式显式设置为可空类型,但我仍然得到上述异常

最佳答案

Expression.Constant 接受一个对象,因此在您的代码中参数被装箱。装箱一个可为 null 的值实际上装箱基础值(请参阅 Boxing Nullable Types ),因此 Expression.Constant 认为参数是 DateTime 而不是 DateTime?。

您可以强制 ConstantExpression 成为 DateTime 吗?通过使用接受类型的 Expression.Constant 的重载:

Expression.Constant(DateTime.Now, typeof(DateTime?))

关于c# - 如果只有一个可为空,则 Linq DateTime 表达式不会进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048379/

相关文章:

c# - 列表包含 linq 中的 ID

c# - 如何使用 LINQ 查找字典列表中每个键的最大值?

c# - 为什么复杂字符串(字符串化的 json 数据)不被接受为 Web API 方法的 POST 参数,而简单字符串却可以?

c# - 用于 HTML 输出的脱离上下文的字符串变量

C# const int 和 const someStruct 之间的区别。为什么 const someStruct 不是 "compile-time constant"?

c# - 无法理解方法参数

c# - 服务器端分页不适用于第一页 kendo grid mvc 包装器

c# - 自定义模型 Binder - 获取具有相同名称的后变量?

c# - 如果值匹配,则从另一个字符串数组获取字符串

c# - EF 6跳过列为空的所有记录,从结果中获取行“N”