💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# orderby 子句(C# 参考) 在查询表达式中,**orderby** 子句可使返回的序列或子序列(组)按升序或降序排序。可以指定多个键,以便执行一个或多个次要排序操作。排序是由针对元素类型的默认比较器执行的。默认排序顺序为升序。您还可以指定自定义比较器。但是,只能通过基于方法的语法使用它。有关更多信息,请参见 [Sorting Data](https://msdn.microsoft.com/zh-cn/library/bb546145.aspx)。 在下面的示例中,第一个查询按从 A 开始的字母顺序对单词进行排序,第二个查询按降序对相同的单词进行排序。(**ascending** 关键字是默认排序值,可以省略。) ``` class OrderbySample1 { static void Main() { // Create a delicious data source. string[] fruits = { "cherry", "apple", "blueberry" }; // Query for ascending sort. IEnumerable<string> sortAscendingQuery = from fruit in fruits orderby fruit //"ascending" is default select fruit; // Query for descending sort. IEnumerable<string> sortDescendingQuery = from w in fruits orderby w descending select w; // Execute the query. Console.WriteLine("Ascending:"); foreach (string s in sortAscendingQuery) { Console.WriteLine(s); } // Execute the query. Console.WriteLine(Environment.NewLine + "Descending:"); foreach (string s in sortDescendingQuery) { Console.WriteLine(s); } // Keep the console window open in debug mode. Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } /* Output: Ascending: apple blueberry cherry Descending: cherry blueberry apple */ ``` 下面的示例对学生的姓氏执行主要排序,然后对他们的名字执行次要排序。 ``` class OrderbySample2 { // The element type of the data source. public class Student { public string First { get; set; } public string Last { get; set; } public int ID { get; set; } } public static List<Student> GetStudents() { // Use a collection initializer to create the data source. Note that each element // in the list contains an inner sequence of scores. List<Student> students = new List<Student> { new Student {First="Svetlana", Last="Omelchenko", ID=111}, new Student {First="Claire", Last="O'Donnell", ID=112}, new Student {First="Sven", Last="Mortensen", ID=113}, new Student {First="Cesar", Last="Garcia", ID=114}, new Student {First="Debra", Last="Garcia", ID=115} }; return students; } static void Main(string[] args) { // Create the data source. List<Student> students = GetStudents(); // Create the query. IEnumerable<Student> sortedStudents = from student in students orderby student.Last ascending, student.First ascending select student; // Execute the query. Console.WriteLine("sortedStudents:"); foreach (Student student in sortedStudents) Console.WriteLine(student.Last + " " + student.First); // Now create groups and sort the groups. The query first sorts the names // of all students so that they will be in alphabetical order after they are // grouped. The second orderby sorts the group keys in alpha order. var sortedGroups = from student in students orderby student.Last, student.First group student by student.Last[0] into newGroup orderby newGroup.Key select newGroup; // Execute the query. Console.WriteLine(Environment.NewLine + "sortedGroups:"); foreach (var studentGroup in sortedGroups) { Console.WriteLine(studentGroup.Key); foreach (var student in studentGroup) { Console.WriteLine(" {0}, {1}", student.Last, student.First); } } // Keep the console window open in debug mode Console.WriteLine("Press any key to exit."); Console.ReadKey(); } } /* Output: sortedStudents: Garcia Cesar Garcia Debra Mortensen Sven O'Donnell Claire Omelchenko Svetlana sortedGroups: G Garcia, Cesar Garcia, Debra M Mortensen, Sven O O'Donnell, Claire Omelchenko, Svetlana */ ``` ## 备注 编译时,**orderby** 子句被转换为对 [OrderBy&lt;TSource, TKey&gt;](https://msdn.microsoft.com/zh-cn/library/bb534966.aspx) 方法的调用。 **orderby** 子句中的多个键转换为 [ThenBy&lt;TSource, TKey&gt;](https://msdn.microsoft.com/zh-cn/library/bb534743.aspx) 方法调用。 ## 请参阅 [C# 参考](https://msdn.microsoft.com/zh-cn/library/618ayhy6.aspx) [查询关键字(C# 参考)](https://msdn.microsoft.com/zh-cn/library/bb310804.aspx) [LINQ 查询表达式(C# 编程指南)](https://msdn.microsoft.com/zh-cn/library/bb397676.aspx) [group 子句(C# 参考)](https://msdn.microsoft.com/zh-cn/library/bb384063.aspx) [Getting Started with LINQ in C#](https://msdn.microsoft.com/zh-cn/library/bb397933.aspx)