У меня есть запрос вроде:
var function = GetSomeExpression();
using (FooModel context = new FooModel())
{
var bar = context.Bar.Where(function);
}
Я хотел бы создать универсальный метод, который может выполнять 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();
}
Возможно ли это сделать?