5

ho definire classe statica per abilitare il paging:come scrivere metodo di estensione per il paging in MVC

public static class Pager 
{ 
    public static IEnumerable<T> PageData<T>(this IEnumerable<T> source, int currentPage, int pageSize) 
    { 
     var sourceCopy = source.ToList(); 

     if (sourceCopy.Count() < pageSize) 
     { 
      return sourceCopy; 
     } 

     return sourceCopy.Skip((currentPage - 1) * pageSize).Take(pageSize); 
    } 
} 

e voglio nel mio controller per fare come:

var pagedDataCourses = products.OrderBy(p => p.productName).PageData(currentPage, pageSize); 

Quindi, dove posso metti quella classe/metodo statico in modo da poter ottenere il metodo di estensione per il paging in tutti i controller.

risposta

3
public static IQueryable<T> Page<T>(this IQueryable<T> query, int page, int pageSize) 
{ 
    int skip = Math.Max(pageSize * (page - 1), 0); 
    return query.Skip(skip).Take(pageSize); 
} 

Dovrai metterlo nello stesso spazio dei nomi di dove stai usando l'estensione. Oppure il "tramite" nella parte superiore del vostro cs file

+0

'chiamata OrderBy' deve essere lì nella query in dotazione. In caso contrario, Skip/Take non funzionerà per i provider LINQ relazionali. – Eranga

Problemi correlati