5

tôi đã xác định lớp tĩnh để cho phép phân trang:cách viết phương pháp mở rộng cho phân trang trong 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); 
    } 
} 

và tôi muốn ở bộ điều khiển của tôi để làm như:

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

vì vậy, nơi tôi có thể đặt lớp/phương thức tĩnh đó để tôi có thể nhận được phương thức mở rộng để phân trang trong tất cả bộ điều khiển.

Trả lời

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ạn sẽ phải đặt nó vào cùng một không gian tên như nơi bạn đang sử dụng phần mở rộng. Hoặc chúng ta "sử dụng" ở phía trên cùng của cs của bạn tập tin

+0

'gọi OrderBy' phải có mặt ở đó trong truy vấn được cung cấp. Nếu không, 'Skip/Take' sẽ không hoạt động đối với các nhà cung cấp LINQ quan hệ. – Eranga