5

mam zdefiniować klasę statyczną, aby umożliwić stronicowania:jak napisać metodę rozszerzenia dla stronicowania w 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); 
    } 
} 

i chcę w moim kontrolera zrobić tak:

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

więc gdzie mogę umieść tę statyczną klasę/metodę, aby uzyskać metodę rozszerzenia dla stronicowania we wszystkich kontrolerach.

Odpowiedz

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); 
} 

Będziesz musiał umieścić go w tej samej przestrzeni nazw, co miejsce, w którym używasz rozszerzenia. Albo nam „za pomocą” na górze swoimi .cs plików

+0

'wezwanie OrderBy' ma być tam w dostarczonym zapytania. W przeciwnym razie 'Skip/Take' nie będzie działać dla relacyjnych dostawców LINQ. – Eranga

Powiązane problemy