我遇到了以下异常:
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/