Почему LINQ-to-SQL Paging не работает внутри функции? - PullRequest
2 голосов
/ 15 марта 2010

Здесь у меня есть произвольный IEnumerable<T>. И я бы хотел создать страницу с использованием универсальной вспомогательной функции вместо записи пар Skip / Take каждый раз Вот моя функция:

IEnumerable<T> GetPagedResults<T>(IEnumerable<T> query, int pageIndex, int pageSize)
{
   return query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
}

И мой код:

result = GetPagedResults(query, 1, 10).ToList();

Это создает оператор SELECT без ключевого слова TOP 10. Но этот код ниже производит SELECT с ним:

result = query.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();

Что я делаю не так в функции?

Ответы [ 2 ]

3 голосов
/ 15 марта 2010

Полагаю, вам нужно изменить его на использование IQueryable, чтобы поддерживать отложенное выполнение. Когда вы используете IEnumerable, он будет применять дополнительные функции (Skip, Take и т. Д.) В памяти после выполнения базового запроса. Однако использование IQueryable приведет к тому, что дополнительные методы будут включены в запрос, отправляемый в базу данных.

2 голосов
/ 15 марта 2010

Попробуйте использовать IQueryable ...

IQueryable<T> GetPagedResults<T>(IQueryable<T> query, 
                                 int pageIndex, 
                                 int pageSize)
{
    return query.Skip((pageIndex - 1) * pageSize).Take(pageSize);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...