Прочитать на английском

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


Enumerable.ThenBy Метод

Определение

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

Перегрузки

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

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

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

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

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

Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs

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

C#
public static System.Linq.IOrderedEnumerable<TSource> ThenBy<TSource,TKey> (this System.Linq.IOrderedEnumerable<TSource> source, Func<TSource,TKey> keySelector);

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

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>) для выполнения дополнительного упорядочения элементов в последовательности.

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

Комментарии

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

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

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

Примечание

Так как 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.

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

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

Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs
Исходный код:
OrderBy.cs

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

C#
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);
C#
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);

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

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.

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

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

Примечание

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

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

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

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

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0