Enumerable.ThenBy Метод

Определение

Выполняет последующее упорядочение элементов в последовательности в порядке возрастания.

Перегрузки

Имя Описание
ThenBy<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Выполняет последующее упорядочение элементов последовательности в порядке возрастания с помощью указанного средства сравнения.

ThenBy<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>)

Выполняет последующее упорядочение элементов последовательности в порядке возрастания в соответствии с ключом.

ThenBy<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

Выполняет последующее упорядочение элементов последовательности в порядке возрастания с помощью указанного средства сравнения.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedEnumerable<TSource> ^ ThenBy(System::Linq::IOrderedEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector, System::Collections::Generic::IComparer<TKey> ^ comparer);
public static System.Linq.IOrderedEnumerable<TSource> ThenBy<TSource,TKey>(this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
static member ThenBy : System.Linq.IOrderedEnumerable<'Source> * Func<'Source, 'Key> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function ThenBy(Of TSource, TKey) (source As IOrderedEnumerable(Of TSource), keySelector As Func(Of TSource, TKey), comparer As IComparer(Of TKey)) As IOrderedEnumerable(Of TSource)

Параметры типа

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого keySelector.

Параметры

source
IOrderedEnumerable<TSource>

Объект, IOrderedEnumerable<TElement> содержащий элементы для сортировки.

keySelector
Func<TSource,TKey>

Функция для извлечения ключа из каждого элемента.

comparer
IComparer<TKey>

Сравнение IComparer<T> ключей.

Возвращаемое значение

Элементы IOrderedEnumerable<TElement> , элементы которых отсортированы по ключу.

Исключения

source или keySelector есть null.

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не перечисляется путем вызова метода GetEnumerator напрямую или с помощью метода foreach в C# или For Each в Visual Basic.

Чтобы упорядочить последовательность по значениям самих элементов, укажите функцию идентификации (x => x в C# или Function(x) x в Visual Basic) для keySelector.

ThenBy и ThenByDescending определены для расширения типа IOrderedEnumerable<TElement>, который также является возвращаемым типом этих методов. Эта конструкция позволяет указать несколько критериев сортировки, применяя любое количество ThenBy или ThenByDescending методы.

Note

Так как IOrderedEnumerable<TElement> наследуется от IEnumerable<T>, вы можете вызвать OrderBy или OrderByDescending результаты вызова OrderBy, OrderByDescendingThenBy или ThenByDescending. В этом случае представлено новое первичное упорядочение, которое игнорирует ранее установленное порядок.

Если comparer это nullтак, для сравнения ключей используется средство Default сравнения ключей по умолчанию.

Этот метод выполняет стабильную сортировку; То есть, если ключи двух элементов равны, порядок элементов сохраняется. В отличие от этого, нестабильная сортировка не сохраняет порядок элементов с одинаковым ключом.

Применяется к

ThenBy<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>)

Выполняет последующее упорядочение элементов последовательности в порядке возрастания в соответствии с ключом.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedEnumerable<TSource> ^ ThenBy(System::Linq::IOrderedEnumerable<TSource> ^ source, Func<TSource, TKey> ^ keySelector);
public static System.Linq.IOrderedEnumerable<TSource> ThenBy<TSource,TKey>(this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector);
static member ThenBy : System.Linq.IOrderedEnumerable<'Source> * Func<'Source, 'Key> -> System.Linq.IOrderedEnumerable<'Source>
<Extension()>
Public Function ThenBy(Of TSource, TKey) (source As IOrderedEnumerable(Of TSource), keySelector As Func(Of TSource, TKey)) As IOrderedEnumerable(Of TSource)

Параметры типа

TSource

Тип элементов source.

TKey

Тип ключа, возвращаемого keySelector.

Параметры

source
IOrderedEnumerable<TSource>

Объект, IOrderedEnumerable<TElement> содержащий элементы для сортировки.

keySelector
Func<TSource,TKey>

Функция для извлечения ключа из каждого элемента.

Возвращаемое значение

Элементы IOrderedEnumerable<TElement> , элементы которых отсортированы по ключу.

Исключения

source или keySelector есть null.

Примеры

В следующем примере кода показано, как использовать ThenBy<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>) для выполнения вторичного упорядочения элементов в последовательности.

string[] fruits = { "grape", "passionfruit", "banana", "mango",
                      "orange", "raspberry", "apple", "blueberry" };

// Sort the strings first by their length and then
//alphabetically by passing the identity selector function.
IEnumerable<string> query =
    fruits.OrderBy(fruit => fruit.Length).ThenBy(fruit => fruit);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

/*
    This code produces the following output:

    apple
    grape
    mango
    banana
    orange
    blueberry
    raspberry
    passionfruit
*/
' Create an array of strings.
Dim fruits() As String =
{"grape", "passionfruit", "banana", "mango",
 "orange", "raspberry", "apple", "blueberry"}

' Sort the strings first by their length and then
' alphabetically by passing the identity function.
Dim query As IEnumerable(Of String) =
fruits _
.OrderBy(Function(fruit) fruit.Length) _
.ThenBy(Function(fruit) fruit)

' Display the results.
Dim output As New System.Text.StringBuilder
For Each fruit As String In query
    output.AppendLine(fruit)
Next
Console.WriteLine(output.ToString())

' This code produces the following output:
'
' apple
' grape
' mango
' banana
' orange
' blueberry
' raspberry
' passionfruit

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не перечисляется путем вызова метода GetEnumerator напрямую или с помощью метода foreach в C# или For Each в Visual Basic.

Чтобы упорядочить последовательность по значениям самих элементов, укажите функцию идентификации (x => x в C# или Function(x) x в Visual Basic) для keySelector.

ThenBy и ThenByDescending определены для расширения типа IOrderedEnumerable<TElement>, который также является возвращаемым типом этих методов. Эта конструкция позволяет указать несколько критериев сортировки, применяя любое количество ThenBy или ThenByDescending методы.

Note

Так как IOrderedEnumerable<TElement> наследуется от IEnumerable<T>, вы можете вызвать OrderBy или OrderByDescending результаты вызова OrderBy, OrderByDescendingThenBy или ThenByDescending. В этом случае представлено новое первичное упорядочение, которое игнорирует ранее установленное порядок.

Этот метод сравнивает ключи с помощью средства Defaultсравнения по умолчанию.

Этот метод выполняет стабильную сортировку; То есть, если ключи двух элементов равны, порядок элементов сохраняется. В отличие от этого, нестабильная сортировка не сохраняет порядок элементов с одинаковым ключом.

В синтаксисе выражения запроса предложение orderby [first criterion], [second criterion] (C#) или Order By [first criterion], [second criterion] (Visual Basic) преобразуется в вызов ThenBy.

См. также раздел

Применяется к