分頁查詢(SQL&LINQ)
阿新 • • 發佈:2018-11-22
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為於記憶體中的商品集合