asp.net пользовательский информационный пейджер - PullRequest
2 голосов
/ 20 января 2009

во всех примерах, которые я видел (используя LinqDataSource, связанный с ListView), запросы к базе данных возвращают полный набор записей. как я могу получить ТОЛЬКО страницу строк, которые я хочу отобразить?

Например, если у меня есть таблица с 1 миллионом строк, и я хочу просмотреть 10 результатов на странице 5, я получу строки с 51 по 60.

Я уверен, что мне нужно реализовать пользовательский пейджинг, но я не нашел хороших примеров.

Ответы [ 3 ]

2 голосов
/ 20 января 2009

Есть много способов сделать это, однако мне лично нравится решение на основе SQL, которое идет в базу данных и получает набор результатов. Это 4GuysFromRolla Article хорошо объясняет это.

1 голос
/ 21 января 2009

У меня сложилось впечатление (из сообщения Скотта Гути " LINQ to SQL (Part 9) "), что LinqDataSource обрабатывает для вас подкачку на уровне базы данных:

Одна из действительно интересных вещей, о которых следует упомянуть выше, - это то, что подкачка и сортировка по-прежнему работают с нашим GridView - даже если мы используем пользовательское событие Selecting для извлечения данных. Эта логика подкачки и сортировки происходит в базе данных - это означает, что мы извлекаем только 10 продуктов из базы данных, которые нам нужно отобразить для текущего индекса страницы в GridView (делая его суперэффективным).

(оригинальный акцент)

Если вы используете пользовательский пейджинг, вы можете сделать что-то подобное в LINQ to SQL:

var tagIds = (from t in Tags where tagList.Contains(t.TagText) select t.TagID).Skip(10).Take(10).ToList();

Это говорит LINQ занять 10 строк (эквивалент T-SQL "TOP 10") после пропуска первых 10 строк - очевидно, что эти значения могут быть динамическими, в зависимости от размера страницы и номера страницы, но вы получите идея.

В цитируемом посте также говорится об использовании пользовательского выражения с LinqDataSource.

Скотт имеет больше информации о Skip / Take in Часть 3 .

1 голос
/ 20 января 2009

Если вы используете MSSql2005, взгляните на эту статью .

Как видите, хитрость заключается в том, чтобы использовать функцию ROW_NUMBER (), которая позволяет получить порядковый номер строки в наборе записей. С его помощью вы можете просто включить нумерацию страниц в зависимости от количества строк, которые вы хотите получить на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...