Entity Framework Dynamic Where

c# entity-framework generics

Вопрос

У меня есть запрос как:

var function = GetSomeExpression();    

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

Я хотел бы сделать универсальный метод, который может выполнять Где против различных сущностей в контексте. Цель не в том, чтобы делать контекст. Бар. Где, контекст. Авто. Где, Контекст. Фар. Где и т. Д.

Что-то, что не может быть сделано, но иллюстрирует цель:

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 to entity - Построение предложений where для проверки коллекций в отношениях «многие ко многим»

Изменить : после обновления вашего поста это больше не актуально; Я оставлю это на случай, если это будет полезно.



Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow