Klauzula orderby (odwołanie w C#)

W wyrażeniu kwerendy orderby klauzuli powoduje, że zwracane sekwencji lub podciąg (grupa) mają być sortowane rosnąco lub malejąco.Można określić wielu kluczy do wykonywania jednej lub więcej operacji sortowania.Sortowanie jest wykonywane przez moduł porównujący domyślne dla typu elementu.Domyślna kolejność sortowania jest rosnąco.Można również określić niestandardowy moduł porównujący.Jednakże to jest dostępna tylko przy użyciu składni metoda oparta.Aby uzyskać więcej informacji, zobacz Sortowanie danych.

Przykład

W poniższym przykładzie pierwszą kwerendę sortuje wyrazy w porządku alfabetycznym, począwszy od A, i drugi kwerenda posortuje te same wyrazy w porządku malejącym.( ascending Słowem kluczowym jest domyślna wartość sortowania i mogą być pominięte.)

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
*/

W następującym przykładzie wykonywana podstawowego sortowanie według nazwisk uczniów i sortowanie dodatkowe na ich imiona.

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
*/

Uwagi

W czasie kompilacji orderby klauzuli jest tłumaczony na wezwanie do OrderBy``2 metody.Wiele kluczy w orderby klauzuli Przetłumacz na ThenBy``2 wywołania metody.

Zobacz też

Informacje

group — Klauzula (odwołanie w C#)

Koncepcje

Wyrażenia kwerend LINQ (Przewodnik programowania w języku C#)

Inne zasoby

Odwołanie w C#

Słowa kluczowe zapytania (odwołanie w C#)

Wprowadzenie do korzystania z LINQ w C#