我正在创建一些动态linq,并遇到以下问题:
二进制运算符GreaterThanOrEqual未为“System.Nullable`1System.DateTime”和“System.DateTime”类型定义
我明白为什么,因为我的字段类型是可空的,并且本质上是传入DateTime.Now的。
所以在试图解决这个问题时,我试过
System.Nullable<DateTime> now;
now = DateTime.Now;但是结果类型是一个非空对象,因此仍然给出了上面的例外情况。
有什么建议吗!
更新:为了得到更多的澄清,现在变量在设置为非空类型时变为非空类型,而不是保留为可空的DateTime,因此匹配抛出一个异常。
Update:实际代码可以在CodePlex项目中看到:
http://webquarters.codeplex.com/SourceControl/changeset/view/36529#574700
违规线是145。
fExp = Expression.GreaterThanOrEqual(fExpLeft, fExpRight);发布于 2022-05-18 16:47:33
这是相当容易的,不需要长时间的解释,因为我看到了。除此之外的一切都是没有必要的。
Expression.Constant()接受一个Type参数。
例如,使用int来执行int?而不是Expression.Constant(someInt),使用Expression.Constant(someInt, typeof(int?)),这将把someInt转换为int?在执行之前。
如果需要,可以为您的类型使用泛型和/或反射。
这将是使用泛型和反射创建GreaterThan表达式的完整代码。使用这个,它是否为空并不重要。
var greaterThan = Expression.GreaterThan(
Expression.Property(Expression.Parameter(typeof(T)), property),
Expression.Constant(inValue, property.PropertyType));https://stackoverflow.com/questions/2088231
复制相似问题