IncludeFilter inGenericリポジトリ

c# entity-framework-6 entity-framework-plus linq

質問

私も含めてフィルタが必要です。私はすべてのテーブルにレコードステータスを持っています。だから私はこれに基づいてレコードをフィルタリングする必要があります。これに対応するために、 Z.EntityFramework.PlusIncludeFilterメソッドを使用しています。

下の私の一般的なデータコード。

    public async Task<T> GetAsync(int id, params Expression<Func<T, object>>[] includes)
    {
        var query = _context.Set<T>().AsQueryable(); //.FindAsync(id);

        if (includes.Length > 0)
        {
            query = includes.Aggregate(query,
              (current, include) => current.IncludeFilter(include));
        }
        var item = await query.FirstOrDefaultAsync(x => x.Id == id);
        return item;
    }

とき私は呼び出し元のメソッド(ビジネスクラス)からの状態を正常に動作します。しかし、私はこれらの場所をすべての場所に含めることは望ましくありません。だから私はこの方法を変更する必要がどこに条件を自分自身を含める。

私を助けてください。私はどこに私のインクルードパラメータの拡張子を取得していない

注:includeのそれぞれにwhereの条件を含める必要があります。

人気のある回答

理論的には、すべてのエンティティタイプにRecordStatusプロパティを持つインターフェイス( IRecord ?)を実装することができます。

次にExpression<Func<T, IRecord>>[]パラメータをExpression<Func<T, IRecord>>[]変更することができます。

トリッキーな部分は、与えられたものに基づいて新しいinclude式を構築し、それぞれに&& r.RecordStatus == "whatever"を追加することです。そのようなことをするコードは少し醜いかもしれませんが、可能でなければなりません。




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ