9

次のような基本クラスに 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で同様に行うことができますか?

4

4 に答える 4

19

SQL の1=1"thingy" に相当する LINQ の述語は、常に true を返す述語です。

x => true

デフォルトの方法を次のように変更します。

public virtual Expression<Func<CustomerCustomerType, bool>> WhereFilter
{
    get { return x=>true; }
}
于 2013-09-03T13:16:34.200 に答える
2

次のことができます。

    public virtual Expression<Func<CustomerCustomerType, bool>> WhereFilter    
    {
        get { return customerCustomerType => true; }
    }

これは常に true を返す式です。

于 2013-09-03T13:20:56.727 に答える
0

デバッグ中の場合、ラムダ式 (EF) を使用できません。これを使用して linq をごまかすことができます。標準の linq を使用する場合は、最後に .Compile() を付けてこの文を使用します。

Expression>.Lambda(Expression.Constant(true),Expression.Parameter(typeof(T)))

于 2014-09-23T20:27:04.523 に答える