DbSession.Default.From()
.Page(10, 2)
.Where(Products._.CategoryID.SelectIn(1,2,3))
.ToList();
產生 SQL 可見 ORDER BY [Products].[ProductID] ASC(主鍵)。
.OrderBy(Products._.CategoryID.Asc) // 單欄位升冪
分頁 SQL 將依 CategoryID 排序而非主鍵。
.OrderBy(Products._.CategoryID.Asc && Products._.ProductID.Asc)
對應 ORDER BY [CategoryID] ASC, [ProductID] ASC。
.OrderBy(Products._.UnitPrice.Desc)
.GroupBy(Products._.CategoryID.GroupBy && Products._.ProductName.GroupBy)
搭配 Select 聚合函數使用(見前篇)。
OrderBy 的分頁補上主鍵排序。OrderBy 可避免隱性行為,利於維護。OrderBy 在 Page/From/Top 之前/之後呼叫皆可,內部會正確排序。var list = DbSession.Default.From()
.Where(Products._.Discontinued == false)
.OrderBy(Products._.CategoryID.Asc && Products._.UnitPrice.Desc)
.Page(20, pageIndex)
.ToList();
排序邏輯集中在查詢鏈中,零 SQL 字串,重構安全。