Domanda

Potrei sbagliarmi, ma è il metodo AsPagination non molto inefficiente in quanto fa schifo tutti i dati da un repository prima per inizializzare TotalItems ecc? Quindi paging non è usato per fare l'accesso ai dati più efficiente.

non ho trovato alcun esempio che utilizzano un repository e 'vero' paginazione (cioè utilizza TOP ecc in SQL atcual). Come faccio a utilizzare il cercapersone se ho un metodo di repository con questa firma:

IList GetData (int? Page, OUT INT TotalItems)

Qualsiasi commento sarebbe molto apprezzato. Grazie.

Christian

È stato utile?

Soluzione

Si potrebbe utilizzare il CustomPagination<T> classe che fa parte del MvcContrib in questo modo:

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

e all'interno della vostra vista:

<%= Html.Pager(Model) %>

Altri suggerimenti

Credo che si può essere mal diretto con le assunzioni sulla efficienza di paging? Prova dare un'occhiata al sql di esecuzione in profiler - esegue due istruzioni SQL - uno per recuperare il conteggio e uno per selezionare la top 10. Di seguito è riportato i risultati del SQL eseguito da profiler -

Questa SQL recupera ottiene il conteggio - utilizzato dal cercapersone:

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

Mentre il seguente è la SQL utilizzata per recuperare i dati:

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

Avviso TOP (10), row_number () sopra, e dove ...> 20 dichiarazioni nel secondo script SQL? Fa che il contribuire a chiarire?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top