表达树。在执行方法之前检查属性是否为null

时间:2015-01-14 20:53:07

标签: c# linq lambda tree expression

我有一个表达式树。使用“包含”或“等于”等运算符时一切正常 但是,在某些情况下,要比较的属性为null(从数据库中检索)。

例如,我有一个这样的对象:

public class Customer
{
public virtual string Name{ get; set; }
public virtual string Address{ get; set; }
public virtual string City{ get; set; }
}

用户已决定过滤Customer.Address上的结果返回。但是,从数据库中检索的某些记录为空。然后,当我的Compiled表达式执行并且'Customer'的实例被传递给表达式时,它将失败并返回错误:“对象引用未设置为对象的实例”。

以下是我要表达的内容:

var wPropertyExp = Expression.Property(wParameterExp,"Address");
var wMethod = wDataType.GetMethod("Equals", new[] { typeof(string) });
var wConstantExpression = Expression)Expression.Constant("Test",typeof(string));
wMethodCall = Expression.Convert(wPropertyExp, typeof(string));

wExpression = Expression.Call(wMethodCall, wMethod, wConstantExpression);

wAllExpressions.Add(Expression.Lambda<Func<T, bool>>(wExpression, wParameterExp));

因此,这些表达式获得.Compile(),然后传递Customer实例。地址为空,一切都爆炸了。在针对对象运行'Equals'表达式之前,如何实现检查Customer.Address是否为!= null的方法?

0 个答案:

没有答案