Entity Framework Dynamique Clause Where

c# entity-framework generics

Question

J'ai une requête comme:

var function = GetSomeExpression();    

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

Je voudrais faire une méthode générique qui peut exécuter où contre différentes entités dans le contexte. L'objectif n'est pas d'avoir à faire context.Bar.Where, context.Car.Where, Context.Far.Where, etc.

Quelque chose qui ne peut pas être fait, mais illustre le but est:

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

J'ai étudié l'utilisation de Relfection et je peux obtenir la méthode Where, mais je ne sais pas comment l'exécuter par rapport au contexte qui transmet le délégué. J'ai aussi regardé DynamicMethod, mais faire le tout en IL n'aime pas attirer.

Ce que j'ai jusqu'ici:

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();
}

Est-ce possible?

Réponse acceptée

C'est beaucoup plus facile que ce que j'essayais auparavant:

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

Réponse populaire

voir ce post

LINQ to entity - Création de clauses où tester les collections dans une relation plusieurs à plusieurs

Edit : après votre mise à jour, cela ne semble plus pertinent; Je vais le laisser au cas où cela serait utile.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow