Существует ли пейджинговое решение для ASP.NET MVC, которое делает пейджинг в базе данных? - PullRequest
13 голосов
/ 09 июля 2009

Большинство решений по поиску страниц в ASP.NET MVC, которые я нашел путем поиска в Google, выглядят так, как будто они получают все строки из таблицы базы данных в форме коллекции IEnumerable, выполняют некоторое преобразование страниц в коллекции IEnumerable и затем возвращают результаты в вид. Я хочу иметь возможность просматривать страницы на стороне БД, но у меня все еще есть некоторый класс подкачки для вычисления номера страницы и генерации HTML. Есть ли решение, которое делает это? Или те, на кого я смотрел, делают это, но я не вижу этого, потому что я смотрю на них неправильно?

вот что я смотрел:

Ответы [ 4 ]

14 голосов
/ 09 июля 2009

Посмотрите на образец Gu's Nerdinner .

var upcomingDinners = dinnerRepository.FindUpcomingDinners();  
var paginatedDinners = upcomingDinners.Skip(10).Take(20).ToList(); 

Несмотря на то, что FindUpcomingDinners () получает все предстоящие обеды, запрос не выполняется в базе данных, пока вы не вызовете ToList () в следующей строке. И это после того, как вы пропустите 10 строк и получите только
следующие 20.

5 голосов
/ 09 июля 2009

Вы не правы. PagedList сделает это на сервере БД, так как имеет расширения IQueryable.

3 голосов
/ 09 июля 2009

ScottGu имеет очень хорошую серию блогов из нескольких частей по использованию LINQ в Asp.Net (включая MVC). Я рекомендую прочесть всю серию, начиная с части 1, но Часть 3 охватывает именно то, что вы ищете - раздел под заголовком «Пейджинг наших результатов запроса» специально посвящен поиску страниц в базе данных.

2 голосов
/ 09 июля 2009

не будет ли эффективнее реализовать хранимую процедуру, которая принимает параметры @StartPage и @PageSize?

таким образом вы извлекаете только подмножество данных, которые фактически используются

просто есть параметр out, называемый totalCount или что-то подобное, чтобы вы знали, сколько ссылок на страницы создать, и каждое событие onclick ссылки передаст номер страницы в функцию javascript, которая будет асинхронно загружать div или другой элемент HTML с большим количеством данных

легко

...