我有一个表达式树。使用“包含”或“等于”等运算符时一切正常 但是,在某些情况下,要比较的属性为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的方法?