2016-06-04 3 views
0

У меня есть следующий код:Применить IQueryable ссылку на другой объект

var list1 = server1Products; // server1Products is List<Product> type 
var list2 = server2Products; // server2Products is List<Product> type 
// 
// get a queryable reference from first variable (list1) 
var query = list1.AsQueryable(); 
// 
// apply any filter 
query = query.Where(p => p.Active == true); 
// 
// get result from first list server1Products 
var result1 = query.ToList(); 

Мне нужно применить ЖЕ «запрос» ссылка на переменную «list2».

var result2 = ??????????????; // result from server2Products list 

Это возможно?

+0

Вы имеете в виду 'result2 = query.Where (somethingelse)'? – DavidG

+0

Давайте начнем сначала. Почему вы используете '.AsQueryable()'? –

+0

Привет @GertArnold ... Я упростил дело, это немного сложнее. Мне нужно построить сложное выражение LINQ и применить его во многих списках – JaimeCamargo

ответ

1

Если вы правильно поняли, вы хотите применить тот же фильтр к другому списку, чтобы получить только активные продукты из списка2. Вы можете сделать это следующим образом:

Expression<Func<Product, bool>> expr = p => p.Active; 
var result1 = list1.AsQueryable().Where(expr); 
var result2 = list2.AsQueryable().Where(expr); 

Вызов метода AsQueryable() правильно здесь другой путь C# не будет разрешать правильный метод должным образом.

+1

Вы также можете использовать 'Func ' без 'AsQueryable()'. Я подозреваю, что OP ожидает, что какая-то магия произойдет, используя 'AsQueryable()', но они не отвечают. –

+0

Да, вы правы. Использование такого подхода, который я нашел, - это сделать модульные тесты для фильтров. Когда у вас есть набор фильтров, которые возвращают выражения для дальнейшего использования с ORM, и вы должны их протестировать - вы не сможете этого сделать, не вызвав метод AsQueryable в ваши тестовые списки. Я не знаю других мест, где этот метод был бы уместным. –

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