首先写一个接口
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);