OrderByDescending 會先根據主要屬性從大到小排序ThenByDescending 會在主要排序後,針對相同值的元素進行第二層排序在 C# 中,orderbyDescending(x => x.Value).ThenByDescending(x => x.key) 是一個 LINQ 查詢表達式,用於對集合進行多條件的降序排序。讓我們逐步解析:
這行程式碼的操作過程可以分為兩個主要步驟:
orderbyDescending(x => x.Value):首先對集合中的元素按照其 Value 屬性進行降序排序(從大到小)。ThenByDescending(x => x.key):在第一次排序後,如果有多個元素的 Value 值相同,則再根據這些元素的 key 屬性進行降序排序。這種排序方式特別適用於需要先按照一個主要屬性排序,然後對值相同的元素再進行細分排序的情況。整個過程形成了一種層級式的排序模式,確保資料能夠按照多個條件有條理地組織。
當執行這行程式碼時,系統會:
Value 屬性建立第一層排序(降序)Value 值相同的元素群組,再根據 key 屬性進行第二層排序(降序)為了更直觀地理解這段程式碼的功能,讓我們看一個具體的例子:
// 定義一個簡單的產品類別
public class Product
{
public string Key { get; set; }
public int Value { get; set; }
}
// 建立產品資料集合
List<Product> products = new List<Product>
{
new Product { Key = "蘋果", Value = 10 },
new Product { Key = "香蕉", Value = 20 },
new Product { Key = "葡萄", Value = 20 },
new Product { Key = "芒果", Value = 30 },
new Product { Key = "鳳梨", Value = 30 }
};
// 使用複合排序
var sortedProducts = products
.OrderByDescending(x => x.Value)
.ThenByDescending(x => x.Key)
.ToList();
// 顯示排序結果
foreach (var product in sortedProducts)
{
Console.WriteLine($"名稱: {product.Key}, 數量: {product.Value}");
}
使用上述代碼後,排序結果將會是:
| 排序位置 | 產品名稱 | 數量值 | 排序原因 |
|---|---|---|---|
| 1 | 鳳梨 | 30 | 具有最高的 Value (30),且在同值情況下 Key 排序靠前 |
| 2 | 芒果 | 30 | Value 同為 30,但 Key 字母順序較後 |
| 3 | 葡萄 | 20 | Value 為 20,且 Key 字母順序較前 |
| 4 | 香蕉 | 20 | Value 同為 20,但 Key 字母順序較後 |
| 5 | 蘋果 | 10 | 具有最低的 Value (10) |
不同排序方法在各種資料集情境下的表現差異可以用以下圖表來呈現:
圖表顯示了 LINQ 的 OrderByDescending/ThenByDescending 在處理複雜排序條件時的優勢,特別是當排序涉及多個條件時,其簡潔的語法和優秀的可讀性使其成為首選。
以下思維導圖整理了 LINQ 中各種排序方法及其關係:
思維導圖展示了 LINQ 排序操作的完整生態系統,從基本的 OrderBy/OrderByDescending 到進階的 ThenBy/ThenByDescending,以及 .NET 7 中引入的新式排序方法。
以下視頻詳細介紹了 LINQ 中的排序操作,包括 OrderByDescending 和 ThenByDescending 的使用:
這個教學視頻由 Jamie King 製作,深入介紹了如何排序資料、如何按多個條件排序資料,以及這些操作的翻譯和實際應用。它是理解 LINQ 排序操作的絕佳資源。
上圖展示了在 .NET 中對 List<T> 進行排序的多種方法。在處理集合排序時,了解不同方法間的差異和適用場景至關重要。
當需要按照多個條件進行降序排序時,OrderByDescending 和 ThenByDescending 組合是最佳選擇。例如:
在處理大型資料集時,LINQ 的延遲執行特性可能會影響效能。請考慮以下建議: