Queryable.ThenByDescending Método

Definição

Realiza uma ordenação subsequente dos elementos numa sequência em ordem decrescente.

Sobrecargas

Name Description
ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>)

Realiza uma ordenação subsequente dos elementos numa sequência por ordem decrescente, de acordo com uma chave.

ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>)

Realiza uma ordenação subsequente dos elementos numa sequência por ordem decrescente usando um comparador especificado.

ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>)

Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs

Realiza uma ordenação subsequente dos elementos numa sequência por ordem decrescente, de acordo com uma chave.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedQueryable<TSource> ^ ThenByDescending(System::Linq::IOrderedQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector);
public static System.Linq.IOrderedQueryable<TSource> ThenByDescending<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static System.Linq.IOrderedQueryable<TSource> ThenByDescending<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);
static member ThenByDescending : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> -> System.Linq.IOrderedQueryable<'Source>
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member ThenByDescending : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> -> System.Linq.IOrderedQueryable<'Source>
<Extension()>
Public Function ThenByDescending(Of TSource, TKey) (source As IOrderedQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey))) As IOrderedQueryable(Of TSource)

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave devolvida pela função representada por keySelector.

Parâmetros

source
IOrderedQueryable<TSource>

E IOrderedQueryable<T> que contém elementos para ordenar.

keySelector
Expression<Func<TSource,TKey>>

Uma função para extrair uma chave de cada elemento.

Devoluções

An IOrderedQueryable<T> cujos elementos estão ordenados por ordem decrescente de acordo com uma chave.

Atributos

Exceções

source ou keySelector é null.

Observações

Este método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para estes parâmetros, pode-se passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) método gera um MethodCallExpression que representa o autodenominado ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) como um método genérico construído. Depois passa o MethodCallExpression para o CreateQuery<TElement>(Expression) método de o IQueryProvider representado pela Provider propriedade do source parâmetro. O resultado da chamada CreateQuery<TElement>(Expression) é lançado para escrever IOrderedQueryable<T> e retornado.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressões que representa a chamada ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que execute um tipo secundário dos elementos de source em ordem decrescente, baseado na chave obtida ao invocar keySelector em cada elemento de source. Todas as ordens de ordenação previamente estabelecidas são preservadas.

Aplica-se a

ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>)

Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs
Origem:
Queryable.cs

Realiza uma ordenação subsequente dos elementos numa sequência por ordem decrescente usando um comparador especificado.

public:
generic <typename TSource, typename TKey>
[System::Runtime::CompilerServices::Extension]
 static System::Linq::IOrderedQueryable<TSource> ^ ThenByDescending(System::Linq::IOrderedQueryable<TSource> ^ source, System::Linq::Expressions::Expression<Func<TSource, TKey> ^> ^ keySelector, System::Collections::Generic::IComparer<TKey> ^ comparer);
public static System.Linq.IOrderedQueryable<TSource> ThenByDescending<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
public static System.Linq.IOrderedQueryable<TSource> ThenByDescending<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);
[System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")]
public static System.Linq.IOrderedQueryable<TSource> ThenByDescending<TSource,TKey>(this System.Linq.IOrderedQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);
static member ThenByDescending : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedQueryable<'Source>
[<System.Diagnostics.CodeAnalysis.RequiresDynamicCode("Enumerating collections as IQueryable can require creating new generic types or methods, which requires creating code at runtime. This may not work when AOT compiling.")>]
static member ThenByDescending : System.Linq.IOrderedQueryable<'Source> * System.Linq.Expressions.Expression<Func<'Source, 'Key>> * System.Collections.Generic.IComparer<'Key> -> System.Linq.IOrderedQueryable<'Source>
<Extension()>
Public Function ThenByDescending(Of TSource, TKey) (source As IOrderedQueryable(Of TSource), keySelector As Expression(Of Func(Of TSource, TKey)), comparer As IComparer(Of TKey)) As IOrderedQueryable(Of TSource)

Parâmetros de Tipo Genérico

TSource

O tipo dos elementos de source.

TKey

O tipo da chave que é devolvida pela keySelector função.

Parâmetros

source
IOrderedQueryable<TSource>

E IOrderedQueryable<T> que contém elementos para ordenar.

keySelector
Expression<Func<TSource,TKey>>

Uma função para extrair uma chave de cada elemento.

comparer
IComparer<TKey>

E IComparer<T> para comparar tonalidades.

Devoluções

Uma coleção cujos elementos estão ordenados por ordem decrescente de acordo com uma chave.

Atributos

Exceções

source ou keySelector ou comparer é null.

Exemplos

O exemplo de código seguinte demonstra como usar ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) para realizar uma ordenação secundária dos elementos numa sequência em ordem decrescente usando um 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.AsQueryable()
        .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
*/
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 ascending by their length and 
    ' then descending by using a custom case insensitive comparer.
    Dim query = fruits.AsQueryable() _
        .OrderBy(Function(fruit) fruit.Length) _
        .ThenByDescending(Function(fruit) fruit, New CaseInsensitiveComparer())

    Dim output As New System.Text.StringBuilder
    For Each fruit As String In query
        output.AppendLine(fruit)
    Next

    ' Display the results.
    MsgBox(output.ToString())
End Sub

' This code produces the following output:

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

Observações

Este método tem pelo menos um parâmetro de tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para estes parâmetros, pode-se passar uma expressão lambda e ela será compilada para um Expression<TDelegate>.

O ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) método gera um MethodCallExpression que representa o autodenominado ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) como um método genérico construído. Depois passa o MethodCallExpression para o CreateQuery<TElement>(Expression) método de o IQueryProvider representado pela Provider propriedade do source parâmetro. O resultado da chamada CreateQuery<TElement>(Expression) é lançado para escrever IOrderedQueryable<T> e retornado.

O comportamento de consulta que ocorre como resultado da execução de uma árvore de expressões que representa a chamada ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que execute um tipo secundário dos elementos de source em ordem decrescente, baseado na chave obtida ao invocar keySelector em cada elemento de source. Todas as ordens de ordenação previamente estabelecidas são preservadas. O comparer parâmetro é usado para comparar valores-chave.

Aplica-se a