mvc pregunta contrib localizador - AsPagination
-
30-09-2019 - |
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
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?