在可空属性上使用Expression.NotEqual方法构建表达式

时间:2018-05-15 14:34:02

标签: c# expression

我正在使用“表达式”构建器构建查询。但是,每次我添加以下表达式时,我都会收到错误:

Expression.NotEqual("TableProperty", constant)

错误: “字符集不被识别为有效的日期时间。索引0以未知单词开头”。

当我运行类似的查询时,除了我使用Expression.Equals之外,它不会返回此错误。

进一步检查错误告诉我DateTime.Parse()发生了问题。因此,似乎查询构建器的当前结构对于可空类型的此运算符是不够的。

有没有人知道这个问题的好方法?

1 个答案:

答案 0 :(得分:0)

我摆弄了一下,让它像这样工作(我认为这清楚地说明了我的要求)

 if (member.Type.IsGenericType && member.Type.GetGenericTypeDefinition() == typeof(Nullable<>))
 {
       var isNullCheck = Expression.Equal(member, Expression.Convert(Expression.Constant(null), member.Type));
       return Expression.Or(isNullCheck, Expression.NotEqual(Expression.Property(member, "HasValue"), constant));
 }
 return Expression.NotEqual(Expression.Property(member, "HasValue"), constant);

这里的成员变量是指&#34; TableProperty&#34;