Поделиться через


Сортировка данных

Операция сортировки упорядочивает элементы последовательности на основе одного или нескольких атрибутов. Первое условие сортировки связано с выполнением основной сортировки элементов. Указав второе условие сортировки, можно сортировать элементы внутри каждой группы основной сортировки.

На следующем рисунке показаны результаты операции сортировки в алфавитном порядке в последовательности знаков.

Операции сортировки LINQ

Далее перечислены методы стандартных операторов запроса, которые выполняют сортировку данных.

Методы

Имя метода

Описание

Синтаксис выражения запроса C#

Синтаксис выражения запроса Visual Basic

Дополнительные сведения

OrderBy

Сортировка значений в возрастающем порядке.

orderby

Order By

Enumerable.OrderBy``2

Queryable.OrderBy``2

OrderByDescending

Сортировка значений в убывающем порядке.

orderby … descending

Order By … Descending

Enumerable.OrderByDescending``2

Queryable.OrderByDescending``2

ThenBy

Дополнительная сортировка по возрастанию.

orderby …, …

Order By …, …

Enumerable.ThenBy``2

Queryable.ThenBy``2

ThenByDescending

Дополнительная сортировка по убыванию.

orderby …, … descending

Order By …, … Descending

Enumerable.ThenByDescending``2

Queryable.ThenByDescending``2

Обратный

Изменение порядка элементов в коллекции на обратный.

Неприменимо.

Неприменимо.

Enumerable.Reverse``1

Queryable.Reverse``1

Примеры синтаксиса выражений запроса

Примеры основной сортировки

Основная сортировка по возрастанию

В следующем примере показано использование предложения orderby (Order By в Visual Basic) в запросе LINQ для сортировки строк в массиве по длине строки в порядке возрастания.

        Dim words = {"the", "quick", "brown", "fox", "jumps"}

        Dim sortQuery = From word In words 
                        Order By word.Length 
                        Select word

        Dim sb As New System.Text.StringBuilder()
        For Each str As String In sortQuery
            sb.AppendLine(str)
        Next 

        ' Display the results.
        MsgBox(sb.ToString())

        ' This code produces the following output: 

        ' the 
        ' fox 
        ' quick 
        ' brown 
        ' jumps
            string[] words = { "the", "quick", "brown", "fox", "jumps" };

            IEnumerable<string> query = from word in words
                                        orderby word.Length
                                        select word;

            foreach (string str in query)
                Console.WriteLine(str);

            /* This code produces the following output:

                the
                fox
                quick
                brown
                jumps
            */

Основная сортировка по убыванию

В следующем примере показано использование предложения orderby descending (Order By Descending в Visual Basic) в запросе LINQ для сортировки строк по их первой букве в порядке убывания.

        Dim words = {"the", "quick", "brown", "fox", "jumps"}

        Dim sortQuery = From word In words 
                        Order By word.Substring(0, 1) Descending 
                        Select word

        Dim sb As New System.Text.StringBuilder()
        For Each str As String In sortQuery
            sb.AppendLine(str)
        Next 

        ' Display the results.
        MsgBox(sb.ToString())

        ' This code produces the following output: 

        ' the 
        ' quick 
        ' jumps 
        ' fox 
        ' brown
            string[] words = { "the", "quick", "brown", "fox", "jumps" };

            IEnumerable<string> query = from word in words
                                        orderby word.Substring(0, 1) descending 
                                        select word;

            foreach (string str in query)
                Console.WriteLine(str);

            /* This code produces the following output:

                the
                quick
                jumps
                fox
                brown
            */

Примеры дополнительной сортировки

Дополнительная сортировка по возрастанию

В следующем примере показано использование предложения orderby (Order By в Visual Basic) в запросе LINQ для выполнения основной и дополнительной сортировки строк в массиве. Строки сортируются основным образом по длине и дополнительным — по первой букве строки; в обоих случаях в возрастающем порядке.

        Dim words = {"the", "quick", "brown", "fox", "jumps"}

        Dim sortQuery = From word In words 
                        Order By word.Length, word.Substring(0, 1) 
                        Select word

        Dim sb As New System.Text.StringBuilder()
        For Each str As String In sortQuery
            sb.AppendLine(str)
        Next 

        ' Display the results.
        MsgBox(sb.ToString())

        ' This code produces the following output: 

        ' fox 
        ' the 
        ' brown 
        ' jumps 
        ' quick
            string[] words = { "the", "quick", "brown", "fox", "jumps" };

            IEnumerable<string> query = from word in words
                                        orderby word.Length, word.Substring(0, 1)
                                        select word;

            foreach (string str in query)
                Console.WriteLine(str);

            /* This code produces the following output:

                fox
                the
                brown
                jumps
                quick
            */

Дополнительная сортировка по убыванию

В следующем примере показано использование предложения orderby descending (Order By Descending в Visual Basic) в запросе LINQ для выполнения основной сортировки по возрастанию и дополнительной сортировки по убыванию. Строки сортируются основным образом по длине и дополнительным — по первой букве строки.

        Dim words = {"the", "quick", "brown", "fox", "jumps"}

        Dim sortQuery = From word In words 
                        Order By word.Length, word.Substring(0, 1) Descending 
                        Select word

        Dim sb As New System.Text.StringBuilder()
        For Each str As String In sortQuery
            sb.AppendLine(str)
        Next 

        ' Display the results.
        MsgBox(sb.ToString())

        ' This code produces the following output: 

        ' fox 
        ' the 
        ' quick 
        ' jumps 
        ' brown
            string[] words = { "the", "quick", "brown", "fox", "jumps" };

            IEnumerable<string> query = from word in words
                                        orderby word.Length, word.Substring(0, 1) descending 
                                        select word;

            foreach (string str in query)
                Console.WriteLine(str);

            /* This code produces the following output:

                the
                fox
                quick
                jumps
                brown
            */

См. также

Задачи

Практическое руководство. Упорядочение результатов предложения соединения (Руководство по программированию на C#)

Практическое руководство. Сортировка результатов запроса с помощью LINQ (Visual Basic)

Практическое руководство. Сортировка или фильтрация текстовых данных по любому слову или полю (LINQ)

Ссылки

Предложение orderby (Справочник по C#)

Предложение Order By (Visual Basic)

System.Linq

Основные понятия

Общие сведения о стандартных операторах запроса