SqlSugarPagedList.cs 5.3 KB

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