/// <summary> /// Paged list /// </summary> /// <typeparam name="T">T</typeparam> [JsonObject(MemberSerialization = MemberSerialization.OptIn)] public class PagedList<T> : List<T>, IPagedList<T> { /// <summary> /// Ctor /// </summary> /// <param name="source">source</param> /// <param name="pageIndex">Page index</param> /// <param name="pageSize">Page size</param> /// <param name="getOnlyTotalCount">A value in indicating whether you want to load only total number of records. Set to "true" if you don't want to load data from database</param> public PagedList(IQueryable<T> source, int pageIndex, int pageSize, bool getOnlyTotalCount = false) { var total = source.Count(); this.TotalCount = total; this.TotalPages = total / pageSize; if (total % pageSize > 0) TotalPages++; this.PageSize = pageSize; this.PageIndex = pageIndex; if (getOnlyTotalCount) return; this.AddRange(source.Skip(pageIndex * 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 * 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); } /// <summary> /// Page index /// </summary> [JsonProperty] public int PageIndex { get; } /// <summary> /// Page size /// </summary> [JsonProperty] public int PageSize { get; } /// <summary> /// Total count /// </summary> [JsonProperty] public int TotalCount { get; } /// <summary> /// Total pages /// </summary> [JsonProperty] public int TotalPages { get; } /// <summary> /// Has previous page /// </summary> [JsonProperty] public bool HasPreviousPage { get { return PageIndex > 0; } set { } } /// <summary> /// Has next page /// </summary> [JsonProperty] public bool HasNextPage { get { return PageIndex + 1 < TotalPages; } } [JsonProperty] public List<T> Items { get { return this.ToList(); } } }
留意 [JsonObject(MemberSerialization = MemberSerialization.OptIn)]
[JsonProperty]