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>0
2、LINQ分页处理 使用Skip()和Take()实现分页
Skip(): 跳过指定的n个元素
Take():从前往后取指定的m个元素
var goodsList=GoodsItems.Skip(pigeSize* index).Take(pigeSize).OrderBy(p=>p.UpdateTime).ToList(); //GoodsItem为于内存中的商品集合