Frage

Ich könnte falsch sein, aber ist die AsPagination Methode nicht sehr ineffizient, da sie alle die Daten aus einem Repository zuerst zu initialisieren TotalItems usw. saugen? So Paging verwendet wird, nicht den Datenzugriff effizienter zu machen.

Ich habe gefunden, keine Beispiele, die einen Repository und 'true' Paging verwenden (das heißt verwendet TOP etc. in der atcual SQL). Wie verwende ich den Pager, wenn ich ein Repository-Methode mit dieser Signatur haben:

IList GetData (int? Seite aus int TotalItems)

Jedes Feedback wäre sehr geschätzt. Danke.

Christian

War es hilfreich?

Lösung

Sie könnten die CustomPagination<T> Klasse, die Teil von MVCContrib ist wie folgt:

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);
}

und innerhalb Ihrer Ansicht:

<%= Html.Pager(Model) %>

Andere Tipps

Ich glaube, Sie können mit Ihren Annahmen über die Paging-Effizienz misdirected werden? Versuchen Sie einen Blick auf die Ausführung von SQL in Profiler nehmen - es führt zwei SQL-Anweisungen - ein, um die Zählung abrufen und eine der Top 10. Im Folgenden auszuwählen, die Ergebnisse der ausgeführten SQL von Profiler -

Diese SQL abruft wird die Zählung - durch den Pager verwendet:

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

Während der folgenden ist die SQL verwendet, um die Daten abzurufen:

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

Beachten Sie die TOP (10), row_number () über, und wo ...> 20 Aussagen in dem zweiten SQL-Skript? Heißt das Hilfe klären?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top