mvc contrib Pager Frage - AsPagination
-
30-09-2019 - |
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
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?