PagedList con Entity Framework che ottiene tutti i record

PagedList è una libreria di paging.

_dbContext.Products.ToList().ToPagedList(1, 25); 

Sopra il codice otterrà i primi 25 record nel database per la Pagina 1.

Il problema è che la chiamata ToList() otterrà tutti i record nel database. Quindi la chiamata ToPageList() selezionerà i primi 25 record.

Come combinare EF con PagedList in modo da ottenere solo i primi 25 record nel database? E non ottenere tutti i record, e quindi prendere il primo 25 record.

PS: Devo scrivere la mia libreria di Paging o utilizzare una libreria online? Per favore suggeriscimi qualsiasi altra biblioteca.

    In effetti, stai facendo una ToList() , quindi la query verrà eseguita e l’esecuzione posticipata non verrà più differita.

    Puoi provarlo senza la chiamata ToList() , ma tutto dipende dall’implementazione del ToPagedList(int, int) .

    Puoi semplicemente fare il paging da solo.

     const int pageSize = 25; const int pageNumber = 1; IQueryable query = _dbContext.Products; var pagedQuery = query.Skip(pageSize * (pageNumber - 1)).Take(pageSize).ToList(); 

    E sì, puoi semplicemente hide questa logica dietro un metodo di estensione su IQueryable .

     public static class IQueryableExtensions { public static IQueryable ToPagedQuery(this IQueryable query, int pageSize, int pageNumber) { return query.Skip(pageSize * (pageNumber - 1)).Take(pageSize); } } 

    La soluzione più semplice è utilizzare AsEnumerable() ma richiede l’ordine. A differenza di ToList() , AsEnumerable() non colpisce il database.

     _dbContext.Products.OrderBy(p => p.Id).AsEnumerable().ToPagedList(1, 25);