Mam zapytanie jak:Entity Framework dynamiczna klauzula WHERE
var function = GetSomeExpression();
using (FooModel context = new FooModel())
{
var bar = context.Bar.Where(function);
}
Chciałbym uczynić metoda rodzajowa, które można wykonać Gdzie wobec różnych podmiotów, w tym kontekście. Celem nie jest konieczności wykonywania context.Bar.Where, context.Car.Where, Context.Far.Where itd
coś, czego nie da się zrobić, ale ilustruje cel jest:
var q = context.GetObjectContext(T).Where(queryFunction);
Przyjrzałem się użyciu Relfection i mogę uzyskać metodę Where, ale nie wiem, jak ją wykonać w kontekście kontekstu przekazującego delegata. Spojrzałem również na DynamicMethod, ale robienie całej IL-owej rzeczy nie podoba się atrakcyjnie.
Co mam tak daleko:
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();
}
Czy jest to możliwe do zrobienia?
próbowałem robić to jakiś czas temu i skończyło się na budowaniu repozytorium dla każdego z nich. Chciałbym wiedzieć, co myślą inni ludzie. Designer.cs generuje ctx.CreateQuery ("[Bar]"); –
bendewey