Entity Frameworkの動的Where句

c# entity-framework generics

質問

次のようなクエリがあります。

var function = GetSomeExpression();    

using (FooModel context = new FooModel())
{
    var bar = context.Bar.Where(function);
}

コンテキスト内のさまざまなエンティティに対してWhereを実行できる一般的な方法を作りたいです。目標はcontext.Bar.Where、context.Car.Where、Context.Far.Whereなどをする必要がないことです。

できないこと、しかし目標を説明するものは:

var q = context.GetObjectContext(T).Where(queryFunction);

私はRelfectionの使い方を調べてWhereメソッドを取得することはできますが、デリゲートを渡すコンテキストに対してそれを実行する方法がわかりません。私はDynamicMethodも見ましたが、IL全体をやることは魅力的ではありません。

私がこれまでに持っているもの:

private List<T> GetResults<T>(Expression<Func<T, bool>> queryFunction)
{
    // note: first() is for prototype, should compare param type
    MethodInfo whereMethod = typeof(Queryable).GetMethods()
        .Where(m => m.Name == "Where")
        .First().MakeGenericMethod(typeof(T)); 

    // invoke the method and return the results
    List<T> result = whereMethod.Invoke(
    // have the method info
    // have the expression
    // can reference the context 
    );

    throw new NotImplementedException();
}

これは可能ですか?

受け入れられた回答

これは私が以前試みていたものよりずっと簡単です。

private List<T> GetResults<T>(IQueryable<T> source, 
    Expression<Func<T, bool>> queryFunction)
{
   return source.Where(queryFunction).ToList<T>();
}

人気のある回答

この記事を見なさい

エンティティへのLINQ - 多対多の関係の中でコレクションをテストするためのwhere句を作成する

編集 :あなたの投稿の更新後、これはもう関連性がないようです。参考にしておきます。



Related

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