Enumerable.ThenByDescending Método

Definição

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente.Performs a subsequent ordering of the elements in a sequence in descending order.

Sobrecargas

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

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente, de acordo com uma chave.Performs a subsequent ordering of the elements in a sequence in descending order, according to a key.

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

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente usando um comparador especificado.Performs a subsequent ordering of the elements in a sequence in descending order by using a specified comparer.

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

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente, de acordo com uma chave.Performs a subsequent ordering of the elements in a sequence in descending order, according to a key.

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

Parâmetros de tipo

TSource

O tipo dos elementos de source.The type of the elements of source.

TKey

O tipo da chave retornada por keySelector.The type of the key returned by keySelector.

Parâmetros

source
IOrderedEnumerable<TSource>

Um IOrderedEnumerable<TElement> que contém elementos a ser classificados.An IOrderedEnumerable<TElement> that contains elements to sort.

keySelector
Func<TSource,TKey>

Uma função para extrair uma chave de cada elemento.A function to extract a key from each element.

Retornos

Um IOrderedEnumerable<TElement> cujos elementos são classificados em ordem decrescente de acordo com uma chave.An IOrderedEnumerable<TElement> whose elements are sorted in descending order according to a key.

Exceções

source ou keySelector é null.source or keySelector is null.

Comentários

Esse método é implementado usando a execução adiada.This method is implemented by using deferred execution. O valor de retorno imediato é um objeto que armazena todas as informações necessárias para executar a ação.The immediate return value is an object that stores all the information that is required to perform the action. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando o método GetEnumerator diretamente ou usando foreach no Visual C# ou For Each em Visual Basic.The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Para ordenar uma sequência pelos valores dos próprios elementos, especifique a função de identidade (x => x no Visual C# ou Function(x) x em Visual Basic) para keySelector.To order a sequence by the values of the elements themselves, specify the identity function (x => x in Visual C# or Function(x) x in Visual Basic) for keySelector.

ThenBy e ThenByDescending são definidos para estender o tipo IOrderedEnumerable<TElement>, que também é o tipo de retorno desses métodos.ThenBy and ThenByDescending are defined to extend the type IOrderedEnumerable<TElement>, which is also the return type of these methods. Esse design permite que você especifique vários critérios de classificação aplicando qualquer número de ThenBy ou métodos de ThenByDescending.This design enables you to specify multiple sort criteria by applying any number of ThenBy or ThenByDescending methods.

Observação

Como IOrderedEnumerable<TElement> herda de IEnumerable<T>, você pode chamar OrderBy ou OrderByDescending nos resultados de uma chamada para OrderBy, OrderByDescending, ThenBy ou ThenByDescending.Because IOrderedEnumerable<TElement> inherits from IEnumerable<T>, you can call OrderBy or OrderByDescending on the results of a call to OrderBy, OrderByDescending, ThenBy or ThenByDescending. Isso introduz uma nova ordenação primária que ignora a ordenação estabelecida anteriormente.Doing this introduces a new primary ordering that ignores the previously established ordering.

Esse método de classificação compara as chaves usando o Defaultde comparação padrão.This sorting method compares keys by using the default comparer Default.

Esse método executa uma classificação estável; ou seja, se as chaves de dois elementos forem iguais, a ordem dos elementos será preservada.This method performs a stable sort; that is, if the keys of two elements are equal, the order of the elements is preserved. Por outro lado, uma classificação instável não preserva a ordem dos elementos que têm a mesma chave.In contrast, an unstable sort does not preserve the order of elements that have the same key.

Na sintaxe C# de expressão de consulta Visual, uma cláusula orderby [first criterion], [second criterion] descending se traduz em uma invocação de ThenByDescending.In Visual C# query expression syntax, an orderby [first criterion], [second criterion] descending clause translates to an invocation of ThenByDescending.

Em Visual Basic sintaxe de expressão de consulta, uma cláusula Order By [first criterion], [second criterion] Descending se traduz em uma invocação de ThenByDescending.In Visual Basic query expression syntax, an Order By [first criterion], [second criterion] Descending clause translates to an invocation of ThenByDescending.

Veja também

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

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente usando um comparador especificado.Performs a subsequent ordering of the elements in a sequence in descending order by using a specified comparer.

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

Parâmetros de tipo

TSource

O tipo dos elementos de source.The type of the elements of source.

TKey

O tipo da chave retornada por keySelector.The type of the key returned by keySelector.

Parâmetros

source
IOrderedEnumerable<TSource>

Um IOrderedEnumerable<TElement> que contém elementos a ser classificados.An IOrderedEnumerable<TElement> that contains elements to sort.

keySelector
Func<TSource,TKey>

Uma função para extrair uma chave de cada elemento.A function to extract a key from each element.

comparer
IComparer<TKey>

Um IComparer<T> para comparar chaves.An IComparer<T> to compare keys.

Retornos

Um IOrderedEnumerable<TElement> cujos elementos são classificados em ordem decrescente de acordo com uma chave.An IOrderedEnumerable<TElement> whose elements are sorted in descending order according to a key.

Exceções

source ou keySelector é null.source or keySelector is null.

Exemplos

O exemplo de código a seguir demonstra como usar ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) para executar uma ordenação secundária dos elementos em uma sequência em ordem decrescente usando um comparador personalizado.The following code example demonstrates how to use ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) to perform a secondary ordering of the elements in a sequence in descending order by using a custom comparer.

public class CaseInsensitiveComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        return string.Compare(x, y, true);
    }
}

public static void ThenByDescendingEx1()
{
    string[] fruits = { "apPLe", "baNanA", "apple", "APple", "orange", "BAnana", "ORANGE", "apPLE" };

    // Sort the strings first ascending by their length and 
    // then descending using a custom case insensitive comparer.
    IEnumerable<string> query =
        fruits
        .OrderBy(fruit => fruit.Length)
        .ThenByDescending(fruit => fruit, new CaseInsensitiveComparer());

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

/*
    This code produces the following output:

    apPLe
    apple
    APple
    apPLE
    orange
    ORANGE
    baNanA
    BAnana
*/
' This class provides a custom implementation of the Compare() method.
Class CaseInsensitiveComparer
    Implements IComparer(Of String)

    Function Compare(ByVal x As String, ByVal y As String) As Integer _
    Implements IComparer(Of String).Compare

        ' Compare values and ignore case.
        Return String.Compare(x, y, True)
    End Function
End Class

Sub ThenByDescendingEx1()
    Dim fruits() As String =
    {"apPLe", "baNanA", "apple", "APple", "orange", "BAnana", "ORANGE", "apPLE"}

    ' Sort the strings first by their length and then 
    ' by using a custom "case insensitive" comparer.
    Dim query As IEnumerable(Of String) =
    fruits _
    .OrderBy(Function(fruit) fruit.Length) _
    .ThenByDescending(Function(fruit) fruit, New CaseInsensitiveComparer())

    ' 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())
End Sub

' This code produces the following output:

' apPLe
' apple
' APple
' apPLE
' orange
' ORANGE
' baNanA
' BAnana

Comentários

Esse método é implementado usando a execução adiada.This method is implemented by using deferred execution. O valor de retorno imediato é um objeto que armazena todas as informações necessárias para executar a ação.The immediate return value is an object that stores all the information that is required to perform the action. A consulta representada por esse método não é executada até que o objeto seja enumerado chamando o método GetEnumerator diretamente ou usando foreach no Visual C# ou For Each em Visual Basic.The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Para ordenar uma sequência pelos valores dos próprios elementos, especifique a função de identidade (x => x no Visual C# ou Function(x) x em Visual Basic) para keySelector.To order a sequence by the values of the elements themselves, specify the identity function (x => x in Visual C# or Function(x) x in Visual Basic) for keySelector.

ThenBy e ThenByDescending são definidos para estender o tipo IOrderedEnumerable<TElement>, que também é o tipo de retorno desses métodos.ThenBy and ThenByDescending are defined to extend the type IOrderedEnumerable<TElement>, which is also the return type of these methods. Esse design permite que você especifique vários critérios de classificação aplicando qualquer número de ThenBy ou métodos de ThenByDescending.This design enables you to specify multiple sort criteria by applying any number of ThenBy or ThenByDescending methods.

Observação

Como IOrderedEnumerable<TElement> herda de IEnumerable<T>, você pode chamar OrderBy ou OrderByDescending nos resultados de uma chamada para OrderBy, OrderByDescending, ThenBy ou ThenByDescending.Because IOrderedEnumerable<TElement> inherits from IEnumerable<T>, you can call OrderBy or OrderByDescending on the results of a call to OrderBy, OrderByDescending, ThenBy or ThenByDescending. Isso introduz uma nova ordenação primária que ignora a ordenação estabelecida anteriormente.Doing this introduces a new primary ordering that ignores the previously established ordering.

Se comparer for null, o comparador padrão Default será usado para comparar as chaves.If comparer is null, the default comparer Default is used to compare keys.

Esse método executa uma classificação estável; ou seja, se as chaves de dois elementos forem iguais, a ordem dos elementos será preservada.This method performs a stable sort; that is, if the keys of two elements are equal, the order of the elements is preserved. Por outro lado, uma classificação instável não preserva a ordem dos elementos que têm a mesma chave.In contrast, an unstable sort does not preserve the order of elements that have the same key.

Aplica-se a