2009-02-10 2 views
6

У меня есть запрос, как:Entity Framework Динамическая Где Статья

var function = GetSomeExpression();  

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

Я хотел бы сделать универсальный метод, который может выполняться где против различных субъектов в контексте. Цель не приходится делать context.Bar.Where, context.Car.Where, Context.Far.Where и т.д.

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

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

Я изучил использование Relfection и могу получить метод Where, но не знаю, как его выполнить против контекста, проходящего в делегате. Я также посмотрел на DynamicMethod, но делать все дело с ИЛ не нравится.

То, что я до сих пор:

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

Возможно ли это сделать?

+0

Я пытался делать это некоторое время назад, и в конечном итоге создание хранилища для каждого из них. Я хотел бы знать, что думают другие люди. Конструктор.cs генерирует ctx.CreateQuery («[Bar]»); – bendewey

ответ

7

Это способ проще, то, что я пытался раньше:

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

просмотреть этот

LINQ to entities - Building where clauses to test collections within a many to many relationship

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

+0

Это не помогло. Это заставило меня понять, что я делаю больше, чем нужно, спасибо. – blu

Смежные вопросы