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

Обновлен: Ноябрь 2007

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

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

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

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

Методы

Имя метода

Описание

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

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

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

OrderBy

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

orderby

Order By

Enumerable.OrderBy

Queryable.OrderBy

OrderByDescending

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

orderby … descending

Order By … Descending

Enumerable.OrderByDescending

Queryable.OrderByDescending

ThenBy

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

orderby …, …

Order By …, …

Enumerable.ThenBy

Queryable.ThenBy

ThenByDescending

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

orderby …, … descending

Order By …, … Descending

Enumerable.ThenByDescending

Queryable.ThenByDescending

Обратный

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

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

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

Enumerable.Reverse<TSource>

Queryable.Reverse<TSource>

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

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

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

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

Dim words() As String = {"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
*/

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

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

Dim words() As String = {"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() As String = {"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
*/

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

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

Dim words() As String = {"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
*/

Дополнительные сведения о сортировке данных

Topic Location
Предложение orderby (Справочник по C#) Справочник программиста по C#
Практическое руководство. Упорядочение результатов предложения соединения (Руководство по программированию на C#) Справочник программиста по C#
Практическое руководство. Сортировка или фильтрация текстовых данных по любому слову или полю (LINQ) LINQ (Language-Integrated Query)
Практическое руководство. Сортировка коллекции с помощью LINQ (Visual Basic) Справочник по языку Visual Basic
Предложение orderby (Справочник по C#) dv_csref
Практическое руководство. Упорядочение результатов предложения соединения (Руководство по программированию на C#) dv_csref
Практическое руководство. Сортировка или фильтрация текстовых данных по любому слову или полю (LINQ) dv_Linq
Практическое руководство. Сортировка результатов запроса с помощью LINQ (Visual Basic) dv_vbalr
Предложение orderby (Справочник по C#) dv_csref
Практическое руководство. Упорядочение результатов предложения соединения (Руководство по программированию на C#) dv_csref
Практическое руководство. Сортировка или фильтрация текстовых данных по любому слову или полю (LINQ) dv_Linq
Практическое руководство. Сортировка результатов запроса с помощью LINQ (Visual Basic) dv_vbalr

См. также

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

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

Ссылки

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

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

System.Linq