我在基类中有一个WhereFilter属性,如下所示:
public virtual Expression<Func<CustomerCustomerType, bool>> WhereFilter
{
get { return null; }
}
当它被覆盖时,我想返回别的东西而不是null,所以我可以使用predicatebuilder扩展名And(来自LinqKit),所以我可以这样编写代码:
public override Expression<Func<CustomerCustomerType, bool>> WhereFilter
{
get { return base.WhereFilter.And(x => x.CustomerID == 1); }
}
但这会产生错误,因为WhereFilter为null(对象引用未设置为对象的实例)。
目前我写为:
public override Expression<Func<CustomerCustomerType, bool>> WhereFilter
{
get { return x => x.CustomerID == 1; }
}
因此,当另一个子类对此进行覆盖时,基类属性将丢失。
有什么办法解决这个问题?在SQL中,我所做的是使用一个虚拟,其中1 = 1,这可以在LINQ中类似地完成吗?
最佳答案
LINQ等同于SQL的1=1
“thingy”是始终返回true的谓词:
x => true
更改您的默认方法,如下所示:
public virtual Expression<Func<CustomerCustomerType, bool>> WhereFilter
{
get { return x=>true; }
}