Entity Framework Dynamique De La Clause Where
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 s'exécuter Où l'encontre des Entités différentes dans le contexte. L'objectif est de ne pas avoir à faire contexte.Bar.Où, contexte.Voiture.Où, Contexte.Loin.Où, etc.
Quelque chose qui ne peut pas être fait, mais illustre l'objectif est:
var q = context.GetObjectContext(T).Where(queryFunction);
J'ai regardé dans l'aide de Relfection, et peuvent avoir de la méthode, mais ne savez pas comment l'exécuter dans le contexte de passage dans l'délégué. J'ai également regardé DynamicMethod, mais l'ensemble IL n'est pas quelque chose comme attrayant.
Ce que j'ai à ce jour:
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 de le faire?
- J'avais essayé de le faire tout à l'arrière et a terminé la construction d'un référentiel pour chacun. J'aimerais savoir ce que les autres pensent. Le concepteur.cs génère un ctx.CreateQuery<Barre>("[Bar]");
Vous devez vous connecter pour publier un commentaire.
C'est beaucoup plus facile que ce que j'avais essayé avant:
voir ce post
LINQ to entities - Bâtiment où l'une des clauses de collections de test au sein d'une relation plusieurs-à-plusieurs
Modifier: après votre post de mise à jour, cela ne semble pas pertinente; je vais le laisser dans le cas où il est utile.