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

Était-ce utile?

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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top