首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# LINQ 多字段排序:OrderBy + ThenBy 鏈式調用

     編輯:程式設計綜合問答

錯誤寫法

// 錯誤:後面的 orderby 會覆蓋前面的
var q = from p in db orderby p.score orderby p.name select p;
// 錯誤:匿名類型無法直接比較排序
var q = from p in db orderby new { p.score, p.name } select p;

正確寫法:ThenBy / ThenByDescending

// 方法語法 (推薦)
var query = dbContext.Users
    .OrderBy(u => u.Score)       // 主排序:積分升序
    .ThenBy(u => u.Name);        // 次排序:姓名升序

// 降序組合
var query = dbContext.Users
    .OrderByDescending(u => u.Score)
    .ThenBy(u => u.Name);

// 查詢語法
var query = from u in dbContext.Users
            orderby u.Score, u.Name
            select u;

原理

  • OrderBy 返回 IOrderedQueryable,只有它才有 ThenBy 方法。
  • 多個 orderby 子句在查詢語法中用逗號分隔,編譯器自動轉為 OrderBy/ThenBy 鏈。
  • 匿名類型 new { A, B } **不實現 IComparable**,無法直接用於排序。

動態排序 (字符串字段名)

// System.Linq.Dynamic.Core (NuGet)
var query = dbContext.Users.OrderBy("Score desc, Name asc");
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved