Pregunta

Puedo estar equivocado, pero es el método AsPagination no muy ineficiente, ya que chupa todos los datos de un repositorio de primera para inicializar TotalItems etc.? Así paginación no se utiliza para hacer que el acceso a los datos más eficiente.

I no han encontrado ninguna ejemplos que utilizan un repositorio y paginación 'verdadero' (es decir, utiliza TOP etc. en el SQL atcual). ¿Cómo puedo utilizar el Pager si tengo un método repositorio con esta firma:

IList GetData (int? Página, fuera TotalItems int)

Cualquier información sería muy apreciada. Gracias.

Christian

¿Fue útil?

Solución

Se podría utilizar el CustomPagination<T> clase que es parte de MVCContrib como esto:

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

y dentro de la vista:

<%= Html.Pager(Model) %>

Otros consejos

Creo que puede estar mal direccionados con sus suposiciones sobre la eficacia de paginación? Trate de tomar un vistazo a la ejecución de SQL en perfilador - se ejecuta dos sentencias SQL - uno para recuperar el conteo y uno para seleccionar la parte superior 10. A continuación se muestra los resultados de la SQL ejecutadas a partir de perfiles -

este SQL recupera obtiene el recuento - utilizado por el buscapersonas:

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

Mientras que el siguiente es el SQL para recuperar los datos:

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

Aviso de la parte superior (10), row_number () otra vez, y donde ...> 20 declaraciones en la segunda secuencia de comandos SQL? Clarifica que ayuda?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top