Как намекнул Крейг Штунц , вопрос здесь в том, откуда взялась Customers
и какого она типа. Если это объект в памяти, фильтрация будет происходить в памяти; если это объектный запрос, это произойдет на вашем сервере баз данных, что вам и нужно. Мы не можем увидеть достаточно вашего кода, чтобы знать о Customers
, но я предложу правильный и неправильный пример:
Справа (более или менее):
using (var context = new MyContextType())
{
var Customers = context.Customers;
var query = from d in Customers
select d;
if (!flag)
{
query = from d in query
where d.Orders.Count > 10
select d;
}
return query.ToList();
}
Неправильно:
using (var context = new MyContextType())
{
var Customers = context.Customers.ToList(); // ToList triggers the query
var query = from d in Customers
select d;
if (!flag)
{
query = from d in query
where d.Orders.Count > 10
select d;
}
return query.ToList();
}
Видите разницу? Это context.Customers.ToList()
. Он запускает полный запрос и загружает все в память, прежде чем вы сможете его отфильтровать. Убедитесь, что у вас полностью собранный запрос, включая логику where
, прежде чем запускать на нем ToList()
.
@ Крейг - Надеюсь, ты не возражаешь, чтобы я подхватил твою идею и продолжил с ней. Я бы проголосовал за ваш ответ, если бы у вас был один.