C# 在可为null的属性上使用Expression.NotEqual方法生成表达式

C# 在可为null的属性上使用Expression.NotEqual方法生成表达式,c#,expression,C#,Expression,我正在使用表达式生成器生成查询。但是,每次添加以下表达式时,都会出现错误: Expression.NotEqual("TableProperty", constant) 错误: “字符集无法识别为有效的日期时间。索引0以未知单词开头。” 当我运行一个相同的类似查询时,除了使用Expression.Equals,它不会返回此错误 进一步检查错误会告诉我问题发生在DateTime.Parse()。因此,querybuilder的当前结构似乎不足以满足可空类型上的此运算符 有谁知道解决这个问题的好方

我正在使用表达式生成器生成查询。但是,每次添加以下表达式时,都会出现错误:

Expression.NotEqual("TableProperty", constant)
错误: “字符集无法识别为有效的日期时间。索引0以未知单词开头。”

当我运行一个相同的类似查询时,除了使用Expression.Equals,它不会返回此错误

进一步检查错误会告诉我问题发生在DateTime.Parse()。因此,querybuilder的当前结构似乎不足以满足可空类型上的此运算符


有谁知道解决这个问题的好方法吗?

我做了一些修改,让它像这样工作(我想这也清楚地说明了我的问题)

if(member.Type.IsGenericType&&member.Type.GetGenericTypeDefinition()==typeof(可空))
{
var isNullCheck=Expression.Equal(member,Expression.Convert(Expression.Constant(null),member.Type));
返回Expression.Or(isNullCheck,Expression.NotEqual(Expression.Property(成员,“HasValue”),常量);
}
返回Expression.NotEqual(Expression.Property(成员,“HasValue”),常量;

此处的成员变量引用“TableProperty”

datetime对象没有空选项。默认值为1/1/01。所以对于null,你可以测试1/1/01或者只测试任何大于1900的东西。我们需要一个完整的例子。。。不清楚你在问什么。
 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);