.ToPageList(pagenumber, pageSize)// 不返回Count .ToPageList(pagenumber, pageSize, ref totalCount)//返回Count .ToPageList(pagenumber, pageSize, ref totalCount,ref totalPage)//返回Count+总页数 //如果数据库版本较新可以用 ToOffsetPage 取代 ToPageList //ToPageList 对低版本数据库支持更好 //注意ToPagedList有d的不是sqlsugar封装的
int pagenumber= 1; // pagenumber是从1开始的不是从零开始的 int pageSize = 20; int totalCount=0; //单表分页 var page = db.Queryable<Student>().ToPageList(pagenumber, pageSize, ref totalCount); //如果SqlServer不想有Rownumber可以用 ToOffsetPage 较新版本支持 //多表分页 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);
RefAsync<int> total = 0;//REF和OUT不支持异步,想要真的异步这是最优解 Db.Queryable<Order>().ToPageListAsync(pagenumber, pageSize, total);//ToPageAsync
SELECT * FROM (SELECT [ID],[SchoolId],[Name],[CreateTime],ROW_NUMBER() OVER(ORDER BY GetDate())AS RowIndex FROM [STudent]) T WHERE RowIndex BETWEEN 1 AND 20
5.0.3.2支持
把 ToPageList 换成 ToOffsetPage //offest分页
新功能 : 5.1.2.6-preview03
Oracle分了2种分页,特殊情况下性能慢可以换下面这种
把 ToPageList 换成 ToOffsetPage //offest分页
方式1:只支持SqlServer或者Oracle ( row_index )
[SugarColumn(IsIgnore=true)]//需要加上 public int RowIndex{get;set;} //行号 序号 db.Queryable<Student>().ToPageList(pageIndex, pageSize, ref totalCount)
方式2:都通用
//其他数据库可以这么实现 int i = 1; var getAll = db.Queryable<Order>().Mapper((it,cache)=> { it.num= i;//有分页的话需要计算一下 (pageindex-1)*pagesize+i i++; }).ToList();
方式3:开窗口函数 (数据库需要支持开窗口函数才能用)
//开窗口函数实现 //index = SqlFunc.RowNumber($"{it.Id} asc ,{it.Name} desc ");
答: 1亿数据Count就要1分钟,别说int.max的20亿数据了,所以超过1000万以上的查询就不建议查询count,因为count的时间比查询数据的时间更长
https://www.donet5.com/Home/Doc?typeId=1197
2016 © donet5.comApache Licence 2.0