如何使用表达式检查!= null对用户定义的数据类型?

时间:2016-02-03 20:27:14

标签: c# lambda expression-trees

我是表达新手。我试过这个并且它似乎没有用。

ParameterExpression pe = Expression.Parameter(typeof(Customer));
Expression left = Expression.Property(pe, "OrderList");
Expression right = Expression.Constant(null, typeof(Nullable));
Expression res = Expression.NotEqual(left, right);

我得到了一个" InvalidOperationException"。简单的If-Else语句看起来像这样

if(custObj.OrderList != null)
{...}

任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

只需使用

Expression right = Expression.Constant(null, left.Type);

它将为您提供与左操作数相同类型的null常量(在您的情况下属性)。

答案 1 :(得分:1)

问题是您正在比较不同类型的对象。 您可以使用Expression.Constant(object value)重载来解决此问题, 我假设属性OrderList的类型是引用,如果不是,则无法进行此比较。

ParameterExpression pe = Expression.Parameter(typeof(Customer));
Expression left = Expression.Property(pe, "OrderList");
Expression right = Expression.Constant(null);
Expression res = Expression.NotEqual(left, right);