DbSession.Default.From().Top(10).ToList();
SQL Server / Access:SELECT TOP 10 * FROM [Products]
Oracle:SELECT * FROM (SELECT * FROM Products) WHERE ROWNUM <= 10
適用:首頁最新幾筆、排行榜 Top N、無需翻頁的固定筆數。
DbSession.Default.From().From(3, 8).ToList(); // 第 3~8 筆
產生 SQL(SQL Server):
SELECT * FROM (
SELECT TOP 6 * FROM (
SELECT TOP 8 * FROM [Products] ORDER BY [ProductID] ASC
) AS tempIntable ORDER BY [ProductID] DESC
) AS tempOuttable ORDER BY [ProductID] ASC
原理:TOP endIndex → 反序 → TOP (endIndex-startIndex+1) → 再正序。
適用:精確控制區間、非標準分頁(如第 11~20 筆)。
DbSession.Default.From().Page(10, 2).ToList(); // 每頁 10 筆、第 2 頁
內部自動換算為 From((pageIndex-1)*pageSize + 1, pageIndex*pageSize)。
適用:一般列表分頁、GridView/ListView 數據源。
| 方法 | 可讀性 | SQL 複雜度 | 適用場景 |
|---|---|---|---|
| Top | ★★★★★ | 最簡單 | 固定筆數、無翻頁 |
| From | ★★★☆☆ | 雙層巢狀 TOP | 特定區間、非標準分頁 |
| Page | ★★★★★ | 同 From | 標準分頁、UI 元件綁定 |
OrderBy 使用,否則分頁結果不穩定。TOP 巢狀查詢效能下降,考慮 ROW_NUMBER() OVER (ORDER BY ...) 或 Keyset Pagination(游標分頁)。OrderBy 的分頁加上主鍵排序,但明確指定更佳。掌握三種分頁方法的差異,即可針對不同業務場景選擇最適合的 API,寫出語意清晰、效能優異的分頁查詢。