Net分页

首先写一个接口

 public interface IPagedList

    {

        int CurrentPageIndex { get; set; }

        int PageSize { get; set; }

        int TotalItemCount { get; set; }

    }

然后一个类去实现这个类

 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的呢?我们先写一个拓展方法

 

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

        }

    }

然后调用的时候就可以这样使用了

 

     IQueryable users ;

     users.OrderByDescending(u => u.ID).ToPagedList(request.PageIndex, request.PageSize);

 

posted @ 2016-09-22 13:46  会一  阅读(172)  评论(0编辑  收藏  举报