IQueryableExt.cs 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using Microsoft.EntityFrameworkCore;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Threading.Tasks;
  6. namespace Masuit.Tools.Models
  7. {
  8. public static partial class IQueryableExt
  9. {
  10. /// <summary>
  11. /// 生成分页集合
  12. /// </summary>
  13. /// <typeparam name="T"></typeparam>
  14. /// <param name="query"></param>
  15. /// <param name="page">当前页</param>
  16. /// <param name="size">页大小</param>
  17. /// <returns></returns>
  18. public static async Task<PagedList<T>> ToPagedListAsync<T>(this IQueryable<T> query, int page, int size)
  19. {
  20. var totalCount = await query.CountAsync();
  21. if (page * size > totalCount)
  22. {
  23. page = (int)Math.Ceiling(totalCount / (size * 1.0));
  24. }
  25. if (page <= 0)
  26. {
  27. page = 1;
  28. }
  29. var list = await query.Skip(size * (page - 1)).Take(size).ToListAsync();
  30. return new PagedList<T>(list, page, size, totalCount);
  31. }
  32. /// <summary>
  33. /// 生成分页集合
  34. /// </summary>
  35. /// <typeparam name="T"></typeparam>
  36. /// <param name="query"></param>
  37. /// <param name="page">当前页</param>
  38. /// <param name="size">页大小</param>
  39. /// <returns></returns>
  40. public static PagedList<T> ToPagedList<T>(this IQueryable<T> query, int page, int size)
  41. {
  42. var totalCount = query.Count();
  43. if (page * size > totalCount)
  44. {
  45. page = (int)Math.Ceiling(totalCount / (size * 1.0));
  46. }
  47. if (page <= 0)
  48. {
  49. page = 1;
  50. }
  51. var list = query.Skip(size * (page - 1)).Take(size).ToList();
  52. return new PagedList<T>(list, page, size, totalCount);
  53. }
  54. /// <summary>
  55. /// 生成分页集合
  56. /// </summary>
  57. /// <typeparam name="T"></typeparam>
  58. /// <param name="query"></param>
  59. /// <param name="page">当前页</param>
  60. /// <param name="size">页大小</param>
  61. /// <returns></returns>
  62. public static PagedList<T> ToPagedList<T>(this IEnumerable<T> query, int page, int size)
  63. {
  64. var totalCount = query.Count();
  65. if (page * size > totalCount)
  66. {
  67. page = (int)Math.Ceiling(totalCount / (size * 1.0));
  68. }
  69. if (page <= 0)
  70. {
  71. page = 1;
  72. }
  73. var list = query.Skip(size * (page - 1)).Take(size).ToList();
  74. return new PagedList<T>(list, page, size, totalCount);
  75. }
  76. }
  77. }