SqlSugarPagedList.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. namespace Admin.NET.Core;
  2. /// <summary>
  3. /// 分页泛型集合
  4. /// </summary>
  5. /// <typeparam name="TEntity"></typeparam>
  6. public class SqlSugarPagedList<TEntity>
  7. {
  8. /// <summary>
  9. /// 页码
  10. /// </summary>
  11. public int Page { get; set; }
  12. /// <summary>
  13. /// 页容量
  14. /// </summary>
  15. public int PageSize { get; set; }
  16. /// <summary>
  17. /// 总条数
  18. /// </summary>
  19. public int Total { get; set; }
  20. /// <summary>
  21. /// 总页数
  22. /// </summary>
  23. public int TotalPages { get; set; }
  24. /// <summary>
  25. /// 当前页集合
  26. /// </summary>
  27. public IEnumerable<TEntity> Items { get; set; }
  28. /// <summary>
  29. /// 是否有上一页
  30. /// </summary>
  31. public bool HasPrevPage { get; set; }
  32. /// <summary>
  33. /// 是否有下一页
  34. /// </summary>
  35. public bool HasNextPage { get; set; }
  36. }
  37. /// <summary>
  38. /// 分页拓展类
  39. /// </summary>
  40. public static class SqlSugarPagedExtensions
  41. {
  42. /// <summary>
  43. /// 分页拓展
  44. /// </summary>
  45. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  46. /// <param name="pageIndex">当前页码,从1开始</param>
  47. /// <param name="pageSize">页码容量</param>
  48. /// <param name="expression">查询结果 Select 表达式</param>
  49. /// <returns></returns>
  50. public static SqlSugarPagedList<TResult> ToPagedList<TEntity, TResult>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize,
  51. Expression<Func<TEntity, TResult>> expression)
  52. {
  53. var total = 0;
  54. var items = query.ToPageList(pageIndex, pageSize, ref total, expression);
  55. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  56. }
  57. /// <summary>
  58. /// 分页拓展
  59. /// </summary>
  60. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  61. /// <param name="pageIndex">当前页码,从1开始</param>
  62. /// <param name="pageSize">页码容量</param>
  63. /// <returns></returns>
  64. public static SqlSugarPagedList<TEntity> ToPagedList<TEntity>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize)
  65. {
  66. var total = 0;
  67. var items = query.ToPageList(pageIndex, pageSize, ref total);
  68. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  69. }
  70. /// <summary>
  71. /// 分页拓展
  72. /// </summary>
  73. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  74. /// <param name="pageIndex">当前页码,从1开始</param>
  75. /// <param name="pageSize">页码容量</param>
  76. /// <param name="expression">查询结果 Select 表达式</param>
  77. /// <returns></returns>
  78. public static async Task<SqlSugarPagedList<TResult>> ToPagedListAsync<TEntity, TResult>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize,
  79. Expression<Func<TEntity, TResult>> expression)
  80. {
  81. RefAsync<int> total = 0;
  82. var items = await query.ToPageListAsync(pageIndex, pageSize, total, expression);
  83. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  84. }
  85. /// <summary>
  86. /// 分页拓展
  87. /// </summary>
  88. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  89. /// <param name="pageIndex">当前页码,从1开始</param>
  90. /// <param name="pageSize">页码容量</param>
  91. /// <returns></returns>
  92. public static async Task<SqlSugarPagedList<TEntity>> ToPagedListAsync<TEntity>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize)
  93. {
  94. RefAsync<int> total = 0;
  95. var items = await query.ToPageListAsync(pageIndex, pageSize, total);
  96. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  97. }
  98. /// <summary>
  99. /// 分页拓展
  100. /// </summary>
  101. /// <param name="list">集合对象</param>
  102. /// <param name="pageIndex">当前页码,从1开始</param>
  103. /// <param name="pageSize">页码容量</param>
  104. /// <returns></returns>
  105. public static SqlSugarPagedList<TEntity> ToPagedList<TEntity>(this IEnumerable<TEntity> list, int pageIndex, int pageSize)
  106. {
  107. var total = list.Count();
  108. var items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
  109. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  110. }
  111. /// <summary>
  112. /// 创建 <see cref="SqlSugarPagedList{TEntity}"/> 对象
  113. /// </summary>
  114. /// <typeparam name="TEntity"></typeparam>
  115. /// <param name="items">分页内容的对象集合</param>
  116. /// <param name="total">总条数</param>
  117. /// <param name="pageIndex">当前页码,从1开始</param>
  118. /// <param name="pageSize">页码容量</param>
  119. /// <returns></returns>
  120. private static SqlSugarPagedList<TEntity> CreateSqlSugarPagedList<TEntity>(IEnumerable<TEntity> items, int total, int pageIndex, int pageSize)
  121. {
  122. var totalPages = pageSize > 0 ? (int)Math.Ceiling(total / (double)pageSize) : 0;
  123. return new SqlSugarPagedList<TEntity>
  124. {
  125. Page = pageIndex,
  126. PageSize = pageSize,
  127. Items = items,
  128. Total = total,
  129. TotalPages = totalPages,
  130. HasNextPage = pageIndex < totalPages,
  131. HasPrevPage = pageIndex - 1 > 0
  132. };
  133. }
  134. }