Compartir a través de


Enumerable.ThenByDescending Método

Definición

Realiza una clasificación posterior de los elementos de una secuencia en orden descendente.

Sobrecargas

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

Realiza una clasificación posterior de los elementos de una secuencia en orden descendente con arreglo a una clave.

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

Realiza una clasificación posterior de los elementos de una secuencia en orden descendente utilizando un comparador especificado.

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

Source:
OrderBy.cs
Source:
OrderBy.cs
Source:
OrderBy.cs

Realiza una clasificación posterior de los elementos de una secuencia en orden descendente con arreglo a una clave.

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

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

Parámetros

source
IOrderedEnumerable<TSource>

IOrderedEnumerable<TElement> que contiene los elementos que se van a ordenar.

keySelector
Func<TSource,TKey>

Función para extraer una clave a partir de cada elemento.

Devoluciones

Una interfaz IOrderedEnumerable<TElement> cuyos elementos se ordenan de manera descendente con arreglo a una clave.

Excepciones

source o keySelector es null.

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator método o mediante foreach en C# o For Each en Visual Basic.

Para ordenar una secuencia por los valores de los propios elementos, especifique la función de identidad (x => x en C# o Function(x) x en Visual Basic) para keySelector.

ThenBy y ThenByDescending se definen para extender el tipo IOrderedEnumerable<TElement>, que también es el tipo de valor devuelto de estos métodos. Este diseño permite especificar varios criterios de ordenación aplicando cualquier número de ThenBy métodos o ThenByDescending .

Nota

Dado que IOrderedEnumerable<TElement> hereda de IEnumerable<T>, puede llamar a OrderBy o OrderByDescending en los resultados de una llamada a OrderBy, ThenByOrderByDescendingo ThenByDescending. Al hacerlo, se presenta una nueva ordenación principal que omite la ordenación establecida anteriormente.

Este método de ordenación compara las claves mediante el comparador Defaultpredeterminado .

Este método realiza una ordenación estable; es decir, si las claves de dos elementos son iguales, se conserva el orden de los elementos. Por el contrario, una ordenación inestable no conserva el orden de los elementos que tienen la misma clave.

En la sintaxis de la expresión de consulta de C#, una orderby [first criterion], [second criterion] descending cláusula se traduce en una invocación de ThenByDescending.

En la sintaxis de la expresión de consulta de Visual Basic, una Order By [first criterion], [second criterion] Descending cláusula se traduce en una invocación de ThenByDescending.

Consulte también

Se aplica a

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

Source:
OrderBy.cs
Source:
OrderBy.cs
Source:
OrderBy.cs

Realiza una clasificación posterior de los elementos de una secuencia en orden descendente utilizando un comparador especificado.

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

Tipo de los elementos de source.

TKey

Tipo de la clave devuelta por keySelector.

Parámetros

source
IOrderedEnumerable<TSource>

IOrderedEnumerable<TElement> que contiene los elementos que se van a ordenar.

keySelector
Func<TSource,TKey>

Función para extraer una clave a partir de cada elemento.

comparer
IComparer<TKey>

IComparer<T> para comparar claves.

Devoluciones

Una interfaz IOrderedEnumerable<TElement> cuyos elementos se ordenan de manera descendente con arreglo a una clave.

Excepciones

source o keySelector es null.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar ThenByDescending<TSource,TKey>(IOrderedEnumerable<TSource>, Func<TSource,TKey>, IComparer<TKey>) para realizar una ordenación secundaria de los elementos en una secuencia en orden descendente mediante un comparador personalizado.

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

Comentarios

Este método se implementa mediante la ejecución diferida. El valor devuelto inmediato es un objeto que almacena toda la información necesaria para realizar la acción. La consulta representada por este método no se ejecuta hasta que el objeto se enumera llamando directamente a su GetEnumerator método o mediante foreach en C# o For Each en Visual Basic.

Para ordenar una secuencia por los valores de los propios elementos, especifique la función de identidad (x => x en C# o Function(x) x en Visual Basic) para keySelector.

ThenBy y ThenByDescending se definen para extender el tipo IOrderedEnumerable<TElement>, que también es el tipo de valor devuelto de estos métodos. Este diseño permite especificar varios criterios de ordenación aplicando cualquier número de ThenBy métodos o ThenByDescending .

Nota

Dado que IOrderedEnumerable<TElement> hereda de IEnumerable<T>, puede llamar a OrderBy o OrderByDescending en los resultados de una llamada a OrderBy, ThenByOrderByDescendingo ThenByDescending. Al hacerlo, se presenta una nueva ordenación principal que omite la ordenación establecida anteriormente.

Si comparer es null, el comparador Default predeterminado se usa para comparar claves.

Este método realiza una ordenación estable; es decir, si las claves de dos elementos son iguales, se conserva el orden de los elementos. Por el contrario, una ordenación inestable no conserva el orden de los elementos que tienen la misma clave.

Se aplica a