2015-07-01 6 views
1

У меня есть IQueryable<Person>, который создается на основе некоторых входных параметров (сортировка и фильтр).Применить IQueryable к другому IQueryable/DbContext

Можно ли применить этот IQueryable<T> к DbSet<T> У меня есть в DbContext?

Например:

// create the query from some parameters 
IQueryable<Person> query = CreateQuery(parameters); 

// apply the query somehow to an existing IQueryable/DbSet 
AppContext db = new AppContext(); 
IEnumerable<Person> result = db.People.ApplyQuery(query).ToList(); 
+0

Не должно быть 'Люди' на самом деле' Лицо'? Действительно ли они разные типы? –

+0

'db.People' имеет тип' DbSet '. IQuerable и DbSet имеют один и тот же тип – Catalin

+0

Можете ли вы изменить метод CreateQuery? У меня была аналогичная проблема, но она была решена путем создания базового запроса ('Select (x => x)') и добавления фильтра и сортировки на основе предоставленных «параметров» (если они есть). –

ответ

0

Собственно контекст должен быть одинаковым. Даже худший, у меня был проблема, отведя ToList заявление изнутри Linq запроса к внешнему запросу Linq, т.е.

// myQuery is an IQueryable from a different context 
// This did not work 
IEnumerable<Person> result = db.People.Where(p => myQuery.ToList().Contains(p.Id)).ToList(); 

// This worked 
myList = myQuery.ToList(); 
IEnumerable<Person> result = db.People.Where(p => myList.Contains(p.Id)).ToList(); 

Действительно странно, не так ли?

+0

Ах, извините за такой поздний ответ :) Да, странно. Пока не нашел решения, и мне пришлось изменить стратегию – Catalin

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