2011-05-31 31 views
24

Necesitamos recuperar datos de una base de datos utilizando LINQ. Ahora necesitamos implementar la paginación.LINQ y paginación

Supongo que a la vez necesitamos buscar 10 registros a la vez y cuando hacemos clic en el botón Siguiente, obtendrá los próximos registros 10 de db.

Por favor, guíame con el código. gracias

Respuesta

64

siempre uso el siguiente código:

public static class PagingExtensions 
{ 
    //used by LINQ to SQL 
    public static IQueryable<TSource> Page<TSource>(this IQueryable<TSource> source, int page, int pageSize) 
    { 
     return source.Skip((page - 1) * pageSize).Take(pageSize); 
    } 

    //used by LINQ 
    public static IEnumerable<TSource> Page<TSource>(this IEnumerable<TSource> source, int page, int pageSize) 
    { 
     return source.Skip((page - 1) * pageSize).Take(pageSize); 
    } 

} 

Esa es una clase estática, que se puede incluir en sus fuentes. Después de añadir esta clase se puede hacer lo siguiente:

MyQuery.Page(pageNumber, pageSize) 
+0

wow genial, gracias: D – yozawiratama

+1

Tenga en cuenta que en LINQ to SQL primero debe ordenar la entrada. – Sal

10

.Skip y .Take métodos de extensión se podrían utilizar:

var result = (from c in Customers 
       select new 
       { 
        c.City, 
        c.ContactName 
       } 
      ).Skip(5).Take(5); 
+0

Muy fácil! ¡Gracias por la información! :) – vinigarcia87

18

La función LINQ Take() limitará el número de elementos se toman. La función Skip() ignorará los primeros n elementos. Algo como esto podría funcionar:

myDataSource.Skip(pageSize * curPage).Take(pageSize)