PagedList.cs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Ropin.Inspection.Model.Common
  7. {
  8. public class PagedList<T> : List<T>
  9. {
  10. public int CurrentPage { get; private set; }
  11. public int TotalPages { get; private set; }
  12. public int PageSize { get; private set; }
  13. public int TotalCount { get; private set; }
  14. public bool HasPrevious => CurrentPage > 1;
  15. public bool HasNext => CurrentPage < TotalPages;
  16. public static async Task<PagedList<T>> CreateAsync(IQueryable<T> source, int pageNumber, int pageSize)
  17. {
  18. var totalCount = source.Count();
  19. var items = source.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
  20. var list = new PagedList<T>(items, totalCount, pageNumber, pageSize);
  21. return await Task.FromResult(list);
  22. }
  23. public static PagedList<T> Create(List<T> source, int pageNumber, int pageSize)
  24. {
  25. var totalCount = source.Count();
  26. var list = new PagedList<T>(source, totalCount, pageNumber, pageSize);
  27. return list;
  28. }
  29. public PagedList(List<T> items, int totalCount, int pageNumber, int pageSize)
  30. {
  31. TotalCount = totalCount;
  32. CurrentPage = pageNumber;
  33. PageSize = pageSize;
  34. TotalPages = (int)Math.Ceiling((double)totalCount / PageSize);
  35. AddRange(items);
  36. }
  37. }
  38. }