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);