.ToList()
Вы преобразуете свой запрос в объект памяти, т.е. список, и, таким образом, вызываете выполнение запроса, а затем предоставляете подкачку данных.
Вы можете поместить все это в одно Where
предложение:
Things.Where(e=>e.field1==1 && e.field2>1
&& e=>Helper.MyFilter(e)).Skip(m*pageSize).Take(pageSize);
, а затем .ToList()
.
Таким образом, вы дадите Linq для Sql возможность сгенерировать запрос и получить только те данные, которые вам нужны.
Или есть конкретная причина, почему вы хотите сделать именно это - преобразование в объект памяти и затем фильтрацию? Хотя я не вижу в этом смысла. Вы должны иметь возможность отфильтровывать результаты, которые вам не нужны, в запросе Linq to Sql, прежде чем вы фактически выполните его для базы данных.
EDIT
Как я вижу из обсуждения, у вас есть несколько вариантов.
Если у вас много данных и вы выполняете больше операций чтения, чем записи, возможно, было бы целесообразно сохранить результаты из Helper.MyFilter
в базе данных при вставке, если это возможно. Таким образом, вы можете повысить производительность при выборе, так как вы не будете извлекать все данные из базы данных, а также вы будете иметь более отфильтрованные данные на самом SELECT
.
Или вы можете выбрать другой подход. Вы можете поместить Helper
класс в отдельную сборку и ссылаться на эту сборку из SQL Server . Это позволит вам разместить логику подкачки в вашей базе данных, а также использовать ваш код.