SqlSugarPagedList.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. // 大名科技(天津)有限公司 版权所有
  2. //
  3. // 此源代码遵循位于源代码树根目录中的 LICENSE 文件的许可证
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动
  6. //
  7. // 任何基于本项目二次开发而产生的一切法律纠纷和责任,均与作者无关
  8. namespace Admin.NET.Core;
  9. /// <summary>
  10. /// 分页泛型集合
  11. /// </summary>
  12. /// <typeparam name="TEntity"></typeparam>
  13. public class SqlSugarPagedList<TEntity>
  14. {
  15. /// <summary>
  16. /// 页码
  17. /// </summary>
  18. public int Page { get; set; }
  19. /// <summary>
  20. /// 页容量
  21. /// </summary>
  22. public int PageSize { get; set; }
  23. /// <summary>
  24. /// 总条数
  25. /// </summary>
  26. public int Total { get; set; }
  27. /// <summary>
  28. /// 总页数
  29. /// </summary>
  30. public int TotalPages { get; set; }
  31. /// <summary>
  32. /// 当前页集合
  33. /// </summary>
  34. public IEnumerable<TEntity> Items { get; set; }
  35. /// <summary>
  36. /// 是否有上一页
  37. /// </summary>
  38. public bool HasPrevPage { get; set; }
  39. /// <summary>
  40. /// 是否有下一页
  41. /// </summary>
  42. public bool HasNextPage { get; set; }
  43. }
  44. /// <summary>
  45. /// 分页拓展类
  46. /// </summary>
  47. public static class SqlSugarPagedExtensions
  48. {
  49. /// <summary>
  50. /// 分页拓展
  51. /// </summary>
  52. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  53. /// <param name="pageIndex">当前页码,从1开始</param>
  54. /// <param name="pageSize">页码容量</param>
  55. /// <param name="expression">查询结果 Select 表达式</param>
  56. /// <returns></returns>
  57. public static SqlSugarPagedList<TResult> ToPagedList<TEntity, TResult>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize,
  58. Expression<Func<TEntity, TResult>> expression)
  59. {
  60. var total = 0;
  61. var items = query.ToPageList(pageIndex, pageSize, ref total, expression);
  62. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  63. }
  64. /// <summary>
  65. /// 分页拓展
  66. /// </summary>
  67. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  68. /// <param name="pageIndex">当前页码,从1开始</param>
  69. /// <param name="pageSize">页码容量</param>
  70. /// <returns></returns>
  71. public static SqlSugarPagedList<TEntity> ToPagedList<TEntity>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize)
  72. {
  73. var total = 0;
  74. var items = query.ToPageList(pageIndex, pageSize, ref total);
  75. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  76. }
  77. /// <summary>
  78. /// 分页拓展
  79. /// </summary>
  80. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  81. /// <param name="pageIndex">当前页码,从1开始</param>
  82. /// <param name="pageSize">页码容量</param>
  83. /// <param name="expression">查询结果 Select 表达式</param>
  84. /// <returns></returns>
  85. public static async Task<SqlSugarPagedList<TResult>> ToPagedListAsync<TEntity, TResult>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize,
  86. Expression<Func<TEntity, TResult>> expression)
  87. {
  88. RefAsync<int> total = 0;
  89. var items = await query.ToPageListAsync(pageIndex, pageSize, total, expression);
  90. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  91. }
  92. /// <summary>
  93. /// 分页拓展
  94. /// </summary>
  95. /// <param name="query"><see cref="ISugarQueryable{TEntity}"/>对象</param>
  96. /// <param name="pageIndex">当前页码,从1开始</param>
  97. /// <param name="pageSize">页码容量</param>
  98. /// <returns></returns>
  99. public static async Task<SqlSugarPagedList<TEntity>> ToPagedListAsync<TEntity>(this ISugarQueryable<TEntity> query, int pageIndex, int pageSize)
  100. {
  101. RefAsync<int> total = 0;
  102. var items = await query.ToPageListAsync(pageIndex, pageSize, total);
  103. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  104. }
  105. /// <summary>
  106. /// 分页拓展
  107. /// </summary>
  108. /// <param name="list">集合对象</param>
  109. /// <param name="pageIndex">当前页码,从1开始</param>
  110. /// <param name="pageSize">页码容量</param>
  111. /// <returns></returns>
  112. public static SqlSugarPagedList<TEntity> ToPagedList<TEntity>(this IEnumerable<TEntity> list, int pageIndex, int pageSize)
  113. {
  114. var total = list.Count();
  115. var items = list.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
  116. return CreateSqlSugarPagedList(items, total, pageIndex, pageSize);
  117. }
  118. /// <summary>
  119. /// 创建 <see cref="SqlSugarPagedList{TEntity}"/> 对象
  120. /// </summary>
  121. /// <typeparam name="TEntity"></typeparam>
  122. /// <param name="items">分页内容的对象集合</param>
  123. /// <param name="total">总条数</param>
  124. /// <param name="pageIndex">当前页码,从1开始</param>
  125. /// <param name="pageSize">页码容量</param>
  126. /// <returns></returns>
  127. private static SqlSugarPagedList<TEntity> CreateSqlSugarPagedList<TEntity>(IEnumerable<TEntity> items, int total, int pageIndex, int pageSize)
  128. {
  129. var totalPages = pageSize > 0 ? (int)Math.Ceiling(total / (double)pageSize) : 0;
  130. return new SqlSugarPagedList<TEntity>
  131. {
  132. Page = pageIndex,
  133. PageSize = pageSize,
  134. Items = items,
  135. Total = total,
  136. TotalPages = totalPages,
  137. HasNextPage = pageIndex < totalPages,
  138. HasPrevPage = pageIndex - 1 > 0
  139. };
  140. }
  141. }