Enumerable.OrderBy Метод

Определение

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

Перегрузки

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

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

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

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

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>)

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

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

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

TSource

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

TKey

Тип ключа, возвращаемого функцией keySelector.

Параметры

source
IEnumerable<TSource>

Последовательность значений, которые следует упорядочить.

keySelector
Func<TSource,TKey>

Функция, извлекающая ключ из элемента.

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

IOrderedEnumerable<TSource>

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

Исключения

Параметр source или keySelector имеет значение null.

Примеры

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

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void OrderByEx1()
{
    Pet[] pets = { new Pet { Name="Barley", Age=8 },
                   new Pet { Name="Boots", Age=4 },
                   new Pet { Name="Whiskers", Age=1 } };

    IEnumerable<Pet> query = pets.OrderBy(pet => pet.Age);

    foreach (Pet pet in query)
    {
        Console.WriteLine("{0} - {1}", pet.Name, pet.Age);
    }
}

/*
 This code produces the following output:

 Whiskers - 1
 Boots - 4
 Barley - 8
*/
Structure Pet
    Public Name As String
    Public Age As Integer
End Structure

Sub OrderByEx1()
    ' Create an array of Pet objects.
    Dim pets() As Pet = {New Pet With {.Name = "Barley", .Age = 8},
                     New Pet With {.Name = "Boots", .Age = 4},
                     New Pet With {.Name = "Whiskers", .Age = 1}}

    ' Order the Pet objects by their Age property.
    Dim query As IEnumerable(Of Pet) =
    pets.OrderBy(Function(pet) pet.Age)

    Dim output As New System.Text.StringBuilder
    For Each pt As Pet In query
        output.AppendLine(pt.Name & " - " & pt.Age)
    Next

    ' Display the output.
    Console.WriteLine(output.ToString())
End Sub

' This code produces the following output:
'
' Whiskers - 1
' Boots - 4
' Barley - 8

Комментарии

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

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

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

Примечание

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

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

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

В синтаксисе orderby выражения запроса предложение (Visual C#) или Order By (Visual Basic) преобразуется в вызов OrderBy.

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

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

OrderBy<TSource,TKey>(IEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>)

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

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

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

TSource

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

TKey

Тип ключа, возвращаемого функцией keySelector.

Параметры

source
IEnumerable<TSource>

Последовательность значений, которые следует упорядочить.

keySelector
Func<TSource,TKey>

Функция, извлекающая ключ из элемента.

comparer
IComparer<TKey>

Компаратор IComparer<T>, используемый для сравнения ключей.

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

IOrderedEnumerable<TSource>

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

Исключения

Параметр source или keySelector имеет значение null.

Комментарии

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

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

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

Примечание

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

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

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

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

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