using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
|
namespace PalGain.Core
|
{
|
/// <summary>
|
/// Paged list
|
/// </summary>
|
/// <typeparam name="T">T</typeparam>
|
[Serializable]
|
public class PagedList<T> : List<T>, IPagedList<T>
|
{
|
public PagedList() { }
|
/// <summary>
|
/// Ctor
|
/// </summary>
|
/// <param name="source">source</param>
|
/// <param name="pageIndex">Page index</param>
|
/// <param name="pageSize">Page size</param>
|
public PagedList(IQueryable<T> source, int pageIndex, int pageSize)
|
{
|
int total = source.Count();
|
this.TotalCount = total;
|
this.TotalPages = total / pageSize;
|
|
if (total % pageSize > 0)
|
TotalPages++;
|
|
this.PageSize = pageSize;
|
if (pageIndex > TotalPages)
|
{
|
PageIndex = TotalPages;
|
}
|
else
|
{
|
this.PageIndex = pageIndex;
|
}
|
this.AddRange(source.Skip((PageIndex <= 0 ? 0 : PageIndex - 1) * pageSize).Take(pageSize).ToList());
|
}
|
|
/// <summary>
|
/// Ctor
|
/// </summary>
|
/// <param name="source">source</param>
|
/// <param name="pageIndex">Page index</param>
|
/// <param name="pageSize">Page size</param>
|
public PagedList(IList<T> source, int pageIndex, int pageSize)
|
{
|
TotalCount = source.Count();
|
TotalPages = TotalCount / pageSize;
|
|
if (TotalCount % pageSize > 0)
|
TotalPages++;
|
|
this.PageSize = pageSize;
|
this.PageIndex = pageIndex;
|
this.AddRange(source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList());
|
}
|
|
/// <summary>
|
/// Ctor
|
/// </summary>
|
/// <param name="source">source</param>
|
/// <param name="pageIndex">Page index</param>
|
/// <param name="pageSize">Page size</param>
|
/// <param name="totalCount">Total count</param>
|
public PagedList(IEnumerable<T> source, int pageIndex, int pageSize, int totalCount)
|
{
|
TotalCount = totalCount;
|
TotalPages = TotalCount / pageSize;
|
|
if (TotalCount % pageSize > 0)
|
TotalPages++;
|
|
this.PageSize = pageSize;
|
this.PageIndex = pageIndex;
|
this.AddRange(source);
|
}
|
|
public int PageIndex { get; private set; }
|
public int PageSize { get; private set; }
|
public int TotalCount { get; private set; }
|
public int TotalPages { get; private set; }
|
|
public bool HasPreviousPage
|
{
|
get { return (PageIndex > 0); }
|
}
|
public bool HasNextPage
|
{
|
get { return (PageIndex + 1 < TotalPages); }
|
}
|
}
|
}
|