首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

LINQ to SQL 排序全攻略:OrderBy / ThenBy / 多鍵 / 分組後排序

     編輯:關於.NET

基礎語法

// 升序 (默認)
var q = from e in db.Employees
        orderby e.HireDate
        select e;

// 降序
var q = from p in db.Products
        orderby p.UnitPrice descending
        select p;

Where 與 OrderBy 順序無關

LINQ 允許 where 在 orderby 前後任意位置,異於 T-SQL 固定順序。

var q = from o in db.Orders
        where o.ShipCity == "London"
        orderby o.Freight
        select o;

多鍵排序:ThenBy 鏈式調用

查詢語法

orderby c.City, c.ContactName

Lambda 語法 (推薦)

var q = db.Customers
    .OrderBy(c => c.City)
    .ThenBy(c => c.ContactName);

注意:多個 OrderBy 串聯時按逆序生效 (最後調用的為主鍵)。

降序鏈式

var q = db.Customers
    .OrderByDescending(c => c.City)
    .ThenByDescending(c => c.ContactName);

限制:不支持匿名類型或複雜類型直接排序

// 錯誤:拋出異常
.OrderBy(c => new { c.City, c.ContactName })

// 正確:先 Select 基本類型再排序
.Select(c => c.City)
.OrderBy(c => c);

分組後排序

var q = from p in db.Products
        group p by p.CategoryID into g
        orderby g.Key
        select new {
            g.Key,
            MostExpensive = from p2 in g
                            where p2.UnitPrice == g.Max(p3 => p3.UnitPrice)
                            select p2
        };

先分組,再按分組鍵排序,最後投影每組最高價產品。

生成 SQL 對照

LINQT-SQL
OrderByORDER BY col ASC
OrderByDescendingORDER BY col DESC
ThenByORDER BY col1, col2
ThenByDescendingORDER BY col1 DESC, col2 DESC

最佳實踐

  • 優先使用 Lambda 鏈式 (OrderBy/ThenBy),可讀性更強
  • 排序欄位建議加索引
  • 大結果集分頁時,OrderBy 必須在 Skip/Take 之前
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved