using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Ropin.Inspection.Model.Common { public class PagedList : List { public int CurrentPage { get; private set; } public int TotalPages { get; private set; } public int PageSize { get; private set; } public int TotalCount { get; private set; } public bool HasPrevious => CurrentPage > 1; public bool HasNext => CurrentPage < TotalPages; public static async Task> CreateAsync(IQueryable source, int pageNumber, int pageSize) { var totalCount = source.Count(); var items = source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList(); var list = new PagedList(items, totalCount, pageNumber, pageSize); return await Task.FromResult(list); } public static PagedList Create(List source, int pageNumber, int pageSize) { var totalCount = source.Count(); var list = new PagedList(source, totalCount, pageNumber, pageSize); return list; } public PagedList(List items, int totalCount, int pageNumber, int pageSize) { TotalCount = totalCount; CurrentPage = pageNumber; PageSize = pageSize; TotalPages = (int)Math.Ceiling((double)totalCount / PageSize); AddRange(items); } } }