首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一个操作数为可空类型,另一个操作数为不可空类型,则Expression.GreaterThan将失败。

如果一个操作数为可空类型,另一个操作数为不可空类型,则Expression.GreaterThan将失败。
EN

Stack Overflow用户
提问于 2010-01-18 18:25:46
回答 6查看 18.7K关注 0票数 35

我正在创建一些动态linq,并遇到以下问题:

二进制运算符GreaterThanOrEqual未为“System.Nullable`1System.DateTime”和“System.DateTime”类型定义

我明白为什么,因为我的字段类型是可空的,并且本质上是传入DateTime.Now的。

所以在试图解决这个问题时,我试过

代码语言:javascript
复制
System.Nullable<DateTime> now;
now = DateTime.Now;

但是结果类型是一个非空对象,因此仍然给出了上面的例外情况。

有什么建议吗!

更新:为了得到更多的澄清,现在变量在设置为非空类型时变为非空类型,而不是保留为可空的DateTime,因此匹配抛出一个异常。

Update:实际代码可以在CodePlex项目中看到:

http://webquarters.codeplex.com/SourceControl/changeset/view/36529#574700

违规线是145。

代码语言:javascript
复制
fExp = Expression.GreaterThanOrEqual(fExpLeft, fExpRight);
EN

Stack Overflow用户

发布于 2022-05-18 16:47:33

这是相当容易的,不需要长时间的解释,因为我看到了。除此之外的一切都是没有必要的。

Expression.Constant()接受一个Type参数。

例如,使用int来执行int?而不是Expression.Constant(someInt),使用Expression.Constant(someInt, typeof(int?)),这将把someInt转换为int?在执行之前。

如果需要,可以为您的类型使用泛型和/或反射。

这将是使用泛型和反射创建GreaterThan表达式的完整代码。使用这个,它是否为空并不重要。

代码语言:javascript
复制
var greaterThan = Expression.GreaterThan(
        Expression.Property(Expression.Parameter(typeof(T)), property),
        Expression.Constant(inValue, property.PropertyType));
票数 1
EN
查看全部 6 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2088231

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档