1. 程式人生 > >分頁查詢(SQL&LINQ)

分頁查詢(SQL&LINQ)

 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為於記憶體中的商品集合