Вопрос

Я мог бы ошибаться, но это метод assagination не очень неэффективным, так как он отсасывает все данные из репозитория сначала инициализации тоталемы и т. Д.? Таким образом, пейджинг не используется для создания доступа к данным более эффективным.

Я не нашел никаких примеров, которые используют репозиторий и «истинный» пейджинг (т. Е. Топ и т. Д. В атомном SQL). Как использовать Pager, если у меня есть метод репозитория с этой подписью:

Ilist getData (int? Страница, out int totalitems)

Любая отзыва была бы очень ценится. Спасибо.

Христианин

Это было полезно?

Решение

Вы могли бы использовать CustomPagination<T> Класс, который является частью MVCContrib, как это:

public ActionResult Index(int page)
{
    int totalItems;
    int pageSize = 10;
    var data = Repository.GetData(page, out totalItems);
    var paginatedData = new CustomPagination<Bla>(
        data, page, pageSize, totalItems
    );
    return View(paginatedData);
}

И внутри вашего взгляда:

<%= Html.Pager(Model) %>

Другие советы

Я думаю, что вы можете быть неправильно направлены с вашими предположениями о эффективности пейджинга? Попробуйте взглянуть на выполнение SQL в Profiler - он выполняет два оператора SQL - один для извлечения подсчета и один, чтобы выбрать топ-10. Ниже приведены результаты выполненного SQL от Profiler -

Этот SQL извлекает, получает счет - используется пейджером:

SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT 
   COUNT(1) AS [A1]
   FROM [dbo].[Customer] AS [Extent1]
)
AS [GroupBy1]

Хотя следующее является SQL, используемый для извлечения данных:

SELECT TOP (10) 
[Extent1].[CustomerId] AS [CustomerId], 
[Extent1].[FirstName] AS [FirstName], 
[Extent1].[LastName] AS [LastName],
...
FROM ( SELECT [Extent1].[CustomerId] AS [CustomerId], [Extent1].[FirstName] AS [FirstName], [Extent1].[LastName] AS [LastName], ..., row_number() OVER (ORDER BY [Extent1].[Company] ASC) AS [row_number]
    FROM [dbo].[Customer] AS [Extent1]
)  AS [Extent1]
WHERE [Extent1].[row_number] > 20
ORDER BY [Extent1].[Company] ASC

Обратите внимание на верхнюю (10), row_number () и где ...> 20 утверждений во втором SQL Script? Это помогает уточнить?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top