在 LINQ 中的排序會使用 OrderBy 和 OrderByDescending ,來將集合做遞增排序和遞減排序。不過這兩個只能使用一個條件排序,如果需要增加次要排序條件則要使用 ThenBy 和 ThenByDescending 方法,來增加次要條件達成遞增和遞減。
下面就來示範這四個方法的使用方式
建立測試物件:
建立測試資料:
輸出結果:
輸出結果:
輸出結果:
輸出結果:
延伸閱讀: C# LINQ 從 0 到 1 基礎教學
參考資料:
Microsoft.Learn - Enumerable.OrderBy Method
Microsoft.Learn - Enumerable.OrderByDescending Method
Microsoft.Learn - Enumerable.ThenBy Method
Microsoft.Learn - Enumerable.ThenByDescending Method
下面就來示範這四個方法的使用方式
建立測試物件:
/// <summary>
/// 測驗成績
/// </summary>
/// <param name="No">學號</param>
/// <param name="Score">成績</param>
public record TestScore(string No, int Score);
建立測試資料:
// 測驗成績清單
TestScore[] testScores =
{
new("001", 70),
new("002", 80),
new("003", 90),
new("004", 80),
new("005", 70),
new("006", 60),
};
遞增排序 OrderBy
使用學號遞增排序
List<TestScore> list = testScores
.OrderBy(x => x.No)
.ToList();
輸出結果:
list.ForEach(item => Console.WriteLine($"No:{item.No}, Score:{item.Score}"));
/*
No:001, Score:70
No:002, Score:80
No:003, Score:90
No:004, Score:80
No:005, Score:70
No:006, Score:60
*/
遞減排序
成績遞減排序
List<TestScore> list = testScores
.OrderByDescending(x => x.Score)
.ToList();
輸出結果:
list.ForEach(item => Console.WriteLine($"No:{item.No}, Score:{item.Score}"));
/*
No:003, Score:90
No:002, Score:80
No:004, Score:80
No:001, Score:70
No:005, Score:70
No:006, Score:60
*/
加入排序次要條件
第二條件遞增排序 ThenBy
使用成績遞減排序,相同成績再使用學號遞增排序:
List<TestScore> list = testScores
.OrderByDescending(x => x.Score)
.ThenBy(x => x.No)
.ToList();
輸出結果:
list.ForEach(item => Console.WriteLine($"No:{item.No}, Score:{item.Score}"));
/*
No:003, Score:90
No:002, Score:80
No:004, Score:80
No:001, Score:70
No:005, Score:70
No:006, Score:60
*/
第二條件遞減排序 ThenByDescending
使用成績遞減排序,相同成績再使用學號遞減排序:
List<TestScore> list = testScores
.OrderByDescending(x => x.Score)
.ThenByDescending(x => x.No)
.ToList();
輸出結果:
list.ForEach(item => Console.WriteLine($"No:{item.No}, Score:{item.Score}"));
/*
No:003, Score:90
No:004, Score:80
No:002, Score:80
No:005, Score:70
No:001, Score:70
No:006, Score:60
*/
延伸閱讀: C# LINQ 從 0 到 1 基礎教學
參考資料:
Microsoft.Learn - Enumerable.OrderBy Method
Microsoft.Learn - Enumerable.OrderByDescending Method
Microsoft.Learn - Enumerable.ThenBy Method
Microsoft.Learn - Enumerable.ThenByDescending Method
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com