question mvc contrib pager - AsPagination
-
30-09-2019 - |
Question
Je peux me tromper, mais la méthode est AsPagination pas très inefficace car elle suce toutes les données à partir d'un référentiel premier à Initialiser TotalItems etc.? Donc, la pagination ne sert pas à rendre plus efficace l'accès aux données.
Je n'ai pas trouvé d'exemples qui utilisent un référentiel et la pagination « true » (à savoir utilise TOP etc. dans le SQL atcual). Comment puis-je utiliser le téléavertisseur si j'ai une méthode référentiel avec cette signature:
IList GetData (int? Page sur TotalItems int)
Tous les commentaires serait très apprécié. Merci.
Christian
La solution
Vous pouvez utiliser le CustomPagination<T>
classe qui fait partie de MvcContrib comme ceci:
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);
}
et à l'intérieur de votre vue:
<%= Html.Pager(Model) %>
Autres conseils
Je pense que vous pouvez être mal acheminés avec vos hypothèses sur l'efficacité d'échange? Essayez de jeter un oeil à l'exécution sql dans profileur - il exécute deux instructions SQL - un pour récupérer le compte et un pour sélectionner le top 10. Voici les résultats de la sql exécutée à partir profileur -
Cette récupère sql obtient le nombre - utilisé par le récepteur d'appel:
SELECT [GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[Customer] AS [Extent1]
)
AS [GroupBy1]
Bien que ce qui suit est le sql utilisé pour récupérer les données:
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
Avis du TOP (10), row_number () sur, et où ...> 20 déclarations contenues dans le second script SQL? Est-ce que l'aide à clarifier?