我在基类中有一个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; }
}

10-06 08:21