在做web应用的时候免不了要对数据进行分页,我最近在做asp.net core的开发的时候就遇到了这个需求,现在简单的记录一下:

  1. public class PaginatedList<T>:List<T>
  2. {
  3. /// <summary>
  4. /// 当前页
  5. /// </summary>
  6. public int PageIndex { get; set; }
  7. //总页面数
  8. public int TotalPages { get; set; }
  9.  
  10. public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
  11. {
  12. PageIndex = pageIndex;
  13.  
  14. TotalPages = (int)Math.Ceiling(count / (decimal)pageSize);
  15.  
  16. this.AddRange(items);
  17. }
  18. /// <summary>
  19. /// 判断是否有上一页
  20. /// </summary>
  21. public bool HasPreViousPage => (PageIndex > );
  22. /// <summary>
  23. /// 判断是否有下一页
  24. /// </summary>
  25. public bool HasNextPage => PageIndex < TotalPages;
  26. /// <summary>
  27. /// 创建分页
  28. /// </summary>
  29. /// <param name="source">实体信息</param>
  30. /// <param name="pageIndex">当前页</param>
  31. /// <param name="pageSize">当前页数据条数</param>
  32. /// <returns></returns>
  33. public static async Task<PaginatedList<T>> CreatepagingAsync(IQueryable<T> source,int pageIndex,int pageSize)
  34. {
  35. //返回实体总条数
  36. var count = await source.CountAsync();
  37.  
  38. var items = await source.Skip((pageIndex - ) * pageSize).Take(pageSize).ToListAsync();
  39.  
  40. var dtos=new PaginatedList<T>(items,count,pageIndex,pageSize);
  41. return dtos;
  42. }
  43.  
  44. }

主要的知识点:

①这个类表示一个分页,将与分页有关的内容集成到单个类中,符合单一职责原则

②PageIndex记录当前页,TotalPages记录总的页数,在构造函数执行的时候,会传入必要的参数来初始化这些字段,构造函数的方法签名为(List<T> items, int count, int pageIndex, int pageSize)不难看出,传入的pageindex参数来初始化当前页,这个pageindex参数肯定是由页面来传入的,pageSize是自定义的一个数据,你想让一个页面显示多少条记录,就定义成多少。还有一个List<T>类型的item,由这个传入的参数来确定item的总条数(item.Count()),然后由了总的条数和每页的条数就可以得出总的页数。

③在CreatepagingAsync这个方法中会返回一个构造好的分页类。具体看代码注释

asp.net core下一个简单的分页技术的更多相关文章

  1. 给 asp.net core 写一个简单的健康检查

    给 asp.net core 写一个简单的健康检查 Intro 健康检查可以帮助我们知道应用的当前状态是不是处于良好状态,现在无论是 docker 还是 k8s 还是现在大多数的服务注册发现大多都提供 ...

  2. asp.net core 实现一个简单的仓储

    一直有自己写个框架的想法,但是一直没有行动起来,最近比较闲,正好可以开工了. 现在已经完成了两部分.1.一个简单仓储,实现使用的是ef 2.IOC部分,这里是把内置的ioc替换成了aotofac,这部 ...

  3. Serilog 是 ASP.NET Core 的一个插件,可以简化日志记录

    [翻译] ASP.NET Core 利用 Docker.ElasticSearch.Kibana 来记录日志 原文: Logging with ElasticSearch, Kibana, ASP.N ...

  4. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 登录登出 上一章节我们总算完善了注册的功能,而且也添加了一个用户,现 ...

  5. ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 用户注册 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 用户注册 上一章节我们终于迁移完了 Identity 的数据,也创建 ...

  6. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 迁移数据 上一章节中我们配置了 ...

  7. ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 配置 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 配置 上一章节我们简单介绍了下 Id ...

  8. ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 验证特性 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 验证特性 上一章节我们简单介绍了 ...

  9. ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Identity 框架 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Identity 框架 前面我们使用了 N 多个章节, ...

随机推荐

  1. U盘插入电脑3.0的口没有反应了,2.0的口就可以

    如果驱动没有问题的话,很有可能是优盘硬件故障. 尝试解决办法: 1.使劲插(就是用力一插到底).... 2.插入三分之一,不过速度只能达到2.0的速度.

  2. own address as source address

    1222.762730] br0: received packet on nbif0 with own address as source address[ 1222.769697] br0: rec ...

  3. router-link 自定义点击事件

    <li v-for="(item, index) in menuList"> <router-link class="classify" ta ...

  4. Hadoop伪分布式模式安装

    一.Hadoop介绍 Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS.HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上:而且 ...

  5. 机器学习算法总结(五)——聚类算法(K-means,密度聚类,层次聚类)

    本文介绍无监督学习算法,无监督学习是在样本的标签未知的情况下,根据样本的内在规律对样本进行分类,常见的无监督学习就是聚类算法. 在监督学习中我们常根据模型的误差来衡量模型的好坏,通过优化损失函数来改善 ...

  6. 2-jsp简介

    一.什么是jsp:1.只能运行在服务器中2.可以将java代码嵌入html页面中的技术 补充:在eclipse中修改jsp的创建模板 window--preference--web--jsp file ...

  7. ESP8266 mDNS

    https://circuits4you.com/2017/12/31/esp8266-mdns/ 本教程介绍如何使用ESP8266进行多播DNS?在网络世界中,很难记住每个网站和计算机的IP地址,解 ...

  8. javascript之传输加密

    为什么要使用javascript加密呢?服务端加密远远不够,客户端或者浏览器端也需要加密,以此保证传输信息过程的安全. 今天就我工作中说说这么几种加密算法及其对应的应用场景,如下所示: base64 ...

  9. 线程interrupt和wait

    public class InterruptDemo { public static void main(String[] args) throws InterruptedException{ Thr ...

  10. OPPO Developers Conference(2018.12.26)

    时间:2018.12.26地点:北京国家会议中心