1、利用SQL进行分页查询 SQL SEVER分页查询方式有如下几种:TOP NOT IN、Max、ROW_NUMBER或者写存储过程。其中利用ROW_NUMBER() OVER()分页处理,相对效率较高。ROW_NUMBER() OVER()函数的基本用法:对查询结果排序(当然它还可以分组排序,但这里用不到分组)。
【析】:ROW_NUMBER() OVER (ORDER BY UpdateTime DESC) 先将结果集按UpdateTime降序排列,然后再将所有记录从1到n开始编号。编号是为了确定查询的每次查询的区间。
【例】:查询GoodsType 为"001"或"002"的商品明细,每页显示50条商品详情记录,现在需要查询第二页的记录并且按时间(UpdateTime)倒序展示。
DECLARE @index INT; --索引(起始页为 1) SET @index= 2; DECLARE @pageSize INT; SET @pageSize = 50; --每页显示的数量 DECLARE @firstIndex INT; --起始索引 SET @firstIndex = (@index- 1) * @pageSize + 1; DECLARE @lastIndexINT; --终止索引 SET @lastIndex= @index* @pageSize; --*查询第二页记录*-- SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY UpdateTime DESC) AS RowNo, * FROM dbo.View_GoodsDetail WHERE GoodsType in ('001','002') ) AS T WHERE RowNo BETWEEN @firstIndex AND @lastIndex; --计算总页数-- DECLARE @rowsTotal INT; SET @rowsTotal = ( SELECT COUNT(1) FROM dbo.View_GoodsDetail WHERE GoodsType IN ( '001', '002' ) ); DECLARE @page INT = @rowsTotal/@pageSize+1; --总页数,其中 @rowsTotal>02、LINQ分页处理 使用Skip()和Take()实现分页
Skip(): 跳过指定的n个元素
Take():从前往后取指定的m个元素
var goodsList=GoodsItems.Skip(pigeSize* index).Take(pigeSize).OrderBy(p=>p.UpdateTime).ToList(); //GoodsItem为于内存中的商品集合