首先写一个接口
| 
 1 
2 
3 
4 
5 
6 
 | 
  public interface IPagedList 
    { 
        int CurrentPageIndex { get; set; } 
        int PageSize { get; set; } 
        int TotalItemCount { get; set; } 
    } 
 | 
然后一个类去实现这个类
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
 | 
  public class PagedList<T> : List<T>,IPagedList 
    { 
        public PagedList(IList<T> items, int pageIndex, int pageSize) 
        { 
            PageSize = pageSize; 
            TotalItemCount = items.Count; 
            CurrentPageIndex = pageIndex; 
            for (int i = StartRecordIndex - 1; i < EndRecordIndex; i++) 
            { 
                Add(items[i]); 
            } 
        } 
        public PagedList(IEnumerable<T> items, int pageIndex, int pageSize, int totalItemCount) 
        { 
            AddRange(items); 
            TotalItemCount = totalItemCount; 
            CurrentPageIndex = pageIndex; 
            PageSize = pageSize; 
        } 
        public int ExtraCount { get; set; } 
        public int CurrentPageIndex { get; set; } 
        public int PageSize { get; set; } 
        public int TotalItemCount { get; set; } 
        public int TotalPageCount { get { return (int)Math.Ceiling(TotalItemCount / (double)PageSize); } } 
        public int StartRecordIndex { get { return (CurrentPageIndex - 1) * PageSize + 1; } } 
        public int EndRecordIndex { get { return TotalItemCount > CurrentPageIndex * PageSize ? CurrentPageIndex * PageSize : TotalItemCount; } } 
    } 
 | 
那么最后,我们应该如何去调用这个 PagedList的呢?我们先写一个拓展方法
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
 | 
     public static class PageLinqExtensions 
    { 
        public static PagedList<T> ToPagedList<T> 
            ( 
                this IQueryable<T> allItems, 
                int pageIndex, 
                int pageSize 
            ) 
        { 
            if (pageIndex < 1) 
                pageIndex = 1; 
            var itemIndex = (pageIndex - 1) * pageSize; 
            var pageOfItems = allItems.Skip(itemIndex).Take(pageSize).ToList(); 
            var totalItemCount = allItems.Count(); 
            return new PagedList<T>(pageOfItems, pageIndex, pageSize, totalItemCount); 
        } 
    } 
 | 
然后调用的时候就可以这样使用了
| 
 1 
2 
 | 
      IQueryable<User> users ; 
     users.OrderByDescending(u => u.ID).ToPagedList(request.PageIndex, request.PageSize); 
 | 
来自 Net 分页功能的实现
原文:http://www.cnblogs.com/qiao-xi/p/5594661.html