2009-11-14 17 views
5

tengo una pregunta acerca de LINQ. Estoy usando Skip y Take hacer la paginación:LINQ paginación - obtener los registros totales

(from l in db.ProductList 
      select l).Skip((page - 1) * row_per_page).Take(row_per_page) 

Es trabajo, y necesito recuperar filas totales de la lista de productos para el cálculo de la página máx. Creo que debe utilizar otra consulta para contar filas, pero tienen otra manera de hacer esto en una consulta anterior?

Respuesta

4

Para obtener un recuento de las filas, utilice el método de extensión .Count()

var count = (from l in db.ProductList select l).Count(); 
+1

o: recuento var = db.ProductList.Count() –

+0

Esto lo hará, y ya que está llamando recuento, no tendrá que tirar de alguna página de datos en la memoria ya que esta información se mantiene en el índice (suponiendo que esto la mesa tiene al menos uno); lo que significa que esta consulta será extremadamente rápida, mucho más rápida incluso que devolver un solo registro. – naspinski

0

no hay una manera de conseguir tanto el número total de filas y un "skip/toma" subconjunto de esas filas en la misma consulta

¿Hay una razón por la que necesita esta en dos consultas?

1

La conclusión es que tendrá que enumerar todos los elementos para obtener el número total de páginas. Pero le gustaría enumerarlos solo una vez. le sugiero que pruebe el método GroupBy para obtener un IEnumerable> "páginas". Luego puede usar pages.Count() para obtener el conteo de páginas. O puede enumerar páginas para obtener cada página de elementos. La consulta GroupBy solo se ejecutará una vez.

Cuestiones relacionadas