当前位置: 首页 > news >正文

【分页查询】.NET开源 ORM 框架 SqlSugar 系列

 .NET开源 ORM 框架 SqlSugar 系列

  1. 【开篇】.NET开源 ORM 框架 SqlSugar 系列
  2. 【入门必看】.NET开源 ORM 框架 SqlSugar 系列
  3. 【实体配置】.NET开源 ORM 框架 SqlSugar 系列
  4. 【Db First】.NET开源 ORM 框架 SqlSugar 系列
  5. 【Code First】.NET开源 ORM 框架 SqlSugar 系列
  6. 【数据事务】.NET开源 ORM 框架 SqlSugar 系列
  7. 【连接池】.NET开源 ORM 框架 SqlSugar 系列
  8. 【查询目录】.NET开源 ORM 框架 SqlSugar 系列
  9. 【查询基础】.NET开源 ORM 框架 SqlSugar 系列

💦万丈高楼平地起,做开发想要技术精进,必须要有扎实的基础功底。基础SQL查询语法一定要牢记于心,才能应对后面更为复杂的形势。

01. 核心方法

分页主要用到的核心方法有两个,分别是 ToPageList ToOffsetPage

💥注意事项:

  • 如果数据库版本较新可以用 ToOffsetPage 取代 ToPageList
  • ToPageList 对低版本数据库支持更好 (兼容性较好)
  • ToPagedList有的不是sqlsugar封装的 
.ToPageList(pagenumber, pageSize)// 不返回Count
.ToPageList(pagenumber, pageSize, ref totalCount)//返回Count
.ToPageList(pagenumber, pageSize, ref totalCount,ref totalPage)//返回Count+总页数

02. 同步分页

💥注意事项:

  • 如果SqlServer不想有 Rownumber 可以用 ToOffsetPage 较新版本支持
  • pagenumbe 是从1开始的不是从零开始
 int pagenumber= 1;int pageSize = 20;int totalCount=0;//单表分页var page = db.Queryable<Student>().ToPageList(pagenumber, pageSize, ref totalCount);//多表分页var list = db.Queryable<Student>().LeftJoin<School>((st,sc)=>st.SchoolId==sc.Id).Select((st,sc)=>new{Id=st.Id,Name=st.Name,SchoolName=sc.Name}).ToPageList(pageIndex, pageSize, ref totalCount);

03. 异步分页

💥注意事项:REF 和 OUT 不支持异步,想要真的异步这是最优解。

RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解Db.Queryable<Order>().ToPageListAsync(pagenumber, pageSize, total);//ToPageAsync

  生成的Sql

 SELECT * FROM (SELECT [ID],[SchoolId],[Name],[CreateTime],ROW_NUMBER() OVER(ORDER BY GetDate())AS RowIndex FROM [STudent]) TWHERE RowIndex BETWEEN 1 AND 20

04. SqlSever2012分页  OFFSET 

把  ToPageList 换成  ToOffsetPage   //offest分页

05. Oracle高性能分页 

新功能 : 5.1.2.6-preview03

Oracle分了2种分页,特殊情况下性能慢可以换下面这种

06. 获取行号

方式1:只支持SqlServer或者Oracle  ( row_index

需要加上特性:[SugarColumn(IsIgnore=true)]

[SugarColumn(IsIgnore=true)]//需要加上
public int RowIndex{get;set;} //行号 序号db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount)

方式2:通用,兼容性好 👍

有分页的话需要计算一下 (pageindex-1)*pagesize+i


//其他数据库可以这么实现int i = 1;var getAll = db.Queryable<Order>().Mapper((it,cache)=> {it.num= i;//有分页的话需要计算一下 (pageindex-1)*pagesize+ii++; }).ToList();

方式3:开窗口函数 (数据库需要支持开窗口函数才能用)

//开窗口函数实现
//index  =  SqlFunc.RowNumber($"{it.Id} asc ,{it.Name} desc ");

07. Count为什么不是long ❓

答: 1亿数据Count就要1分钟,别说int.max的20亿数据了,所以超过1000万以上的查询就不建议查询count,因为count的时间比查询数据的时间更长

http://www.lryc.cn/news/494726.html

相关文章:

  • 【CSS in Depth 2 精译_061】9.4 CSS 中的模式库 + 9.5 本章小结
  • 惠普电脑切换默认F1至F12快捷键,FN切换
  • 计算机的错误计算(一百七十)
  • Python `async def` 函数中使用 `yield` 和 `return` 的区别
  • JAVA修饰符
  • Java 单例模式:深度解析与应用
  • 软件质量保证——单元测试之白盒技术
  • Vue0-生命周期-03
  • Flutter:页面滚动
  • 【CameraPoseRefinement】以BARF为例介绍三维重建中的位姿优化
  • YOLO系列论文综述(从YOLOv1到YOLOv11)【第13篇:YOLOv10——实时端到端物体检测】
  • 多数元素
  • EasyDSS视频推拉流技术的应用与安防摄像机视频采集参数
  • 在CentOS7上更换为阿里云源
  • 小程序跳转到本页面并传参
  • Vim操作
  • 金碟云星空-企微通知
  • Java中的运算符“instanceof“详解
  • SVG无功补偿装置MATLAB仿真模型
  • Java 虚拟机:承载 Java 生态的神奇魔盒
  • 多输入多输出 | Matlab实现TCN-LSTM时间卷积神经网络结合长短期记忆神经网络多输入多输出预测
  • 快速排序算法讲解(c基础)
  • 数据结构--二叉树的创建和遍历
  • 2024143读书笔记|《遇见》——立在城市的飞尘里,我们是一列忧愁而又快乐的树
  • 计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI
  • leetcode hot100【LeetCode 48.旋转图像】java实现
  • 力扣1382:将二叉搜索树便平衡
  • ElasticSearch学习篇19_《检索技术核心20讲》搜推广系统设计思想
  • 实战ansible-playbook:Ansible Vault加密敏感数据(三)
  • Python 视频合并工具