IQueryableExt.cs 2.3 KB

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