分页查询

var db = GetInstance();
var pageIndex = 1;
var pageSize = 2;
var totalCount = 0;



单表分页

var page = db.Queryable<Student>().OrderBy(it => it.Id).ToPageList(pageIndex, pageSize, ref totalCount);


多表分页

var pageJoin = db.Queryable<Student, School>((st, sc) => new object[] {
    JoinType.Left,st.SchoolId==sc.Id
}).ToPageList(pageIndex, pageSize, ref totalCount);


取前5条

var top5 = db.Queryable<Student>().Take(5).ToList();


取前5条之后的所有数据

var skip5 = db.Queryable<Student>().Skip(5).ToList();



注意:SqlServer版本底层采用的是Rownumber分页,在排序字段有索引的情况下性能是最好的分页,优于12分页和TOP分页,

RowNumber分页是页码越小性能越快符合多数人的使用习惯,如果追求极限性能 当前码数 大于总页数的一半时可以采用倒序分页法实现对大页码的优化同样达到小页码的性能。

参考代码:

 
 //常规写法
 db.Queryable<Student>().OrderBy(it=>it.Id).ToPageList(pageIndex,pageSize);
 
 
 //针对rowNumber分页的优化写法,该写法可以达到分页最高性能,非对性能要求过高的可以不用这么写
 var Tempdb=db.Queryable<Student>();
 int count = Tempdb.Count();
                var Skip = (R.Page - 1) * R.PageCount;
                var Take = R.PageCount;
                if (R.Page*R.PageCount > P.Count / 2)//页码大于一半用倒序
                {
                    Tempdb.OrderBy(x => x.ID, OrderByType.Desc);
                    var Mod = P.Count % R.PageCount;
                    var Page = (int)Math.Ceiling((Decimal)P.Count / R.PageCount);
                    if (R.Page * R.PageCount >= P.Count)
                    {
                        Skip = 0; Take = Mod == 0 ? R.PageCount : Mod;
                    }
                    else
                    {
                        Skip = (Page - R.Page - 1) * R.PageCount + Mod;
                    }
                }
                else
                {
                    Tempdb.OrderBy(x => x.ID);//升序
                }
                Tempdb.Skip(Skip);
                Tempdb.Take(Take);
 var list=Tempdb.ToList();
















































收藏到朋友圈: