Compartilhar via


Queryable.ThenByDescending Método

Definição

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente.

Sobrecargas

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

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente, de acordo com uma chave.

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

Executa uma ordenação posterior dos elementos em uma sequência em ordem decrescente usando um comparador especificado.

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

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

Executa uma ordenação posterior dos elementos em uma sequência em 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);
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

TSource

O tipo dos elementos de source.

TKey

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

Parâmetros

source
IOrderedQueryable<TSource>

Um IOrderedQueryable<T> que contém elementos a ser classificados.

keySelector
Expression<Func<TSource,TKey>>

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

Retornos

Um IOrderedQueryable<T> cujos elementos são classificados em ordem decrescente de acordo com uma chave.

Exceções

source ou keySelector é null.

Comentários

Esse método tem pelo menos um parâmetro do tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode 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 chamar ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression para o CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro . O resultado da chamada CreateQuery<TElement>(Expression) é convertido em tipo IOrderedQueryable<T> e retornado.

O comportamento da consulta que ocorre como resultado da execução de uma árvore de expressão 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 ele executa um tipo secundário dos elementos de em ordem decrescente source , com base na chave obtida invocando keySelector em cada elemento de source. Todas as ordens de classificação estabelecidas anteriormente 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

Executa uma ordenação posterior dos elementos em uma sequência em 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);
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

TSource

O tipo dos elementos de source.

TKey

O tipo da chave retornada pela keySelector função .

Parâmetros

source
IOrderedQueryable<TSource>

Um IOrderedQueryable<T> que contém elementos a ser classificados.

keySelector
Expression<Func<TSource,TKey>>

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

comparer
IComparer<TKey>

Um IComparer<T> para comparar chaves.

Retornos

Uma coleção cujos elementos são classificados em ordem decrescente de acordo com uma chave.

Exceções

source, keySelector ou comparer é null.

Exemplos

O exemplo de código a seguir demonstra como usar ThenByDescending<TSource,TKey>(IOrderedQueryable<TSource>, Expression<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.

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

Comentários

Esse método tem pelo menos um parâmetro do tipo Expression<TDelegate> cujo argumento de tipo é um dos Func<T,TResult> tipos. Para esses parâmetros, você pode 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 chamar ThenBy<TSource,TKey>(IOrderedQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) a si mesmo como um método genérico construído. Em seguida, ele passa o MethodCallExpression para o CreateQuery<TElement>(Expression) método do IQueryProvider representado pela Provider propriedade do source parâmetro . O resultado da chamada CreateQuery<TElement>(Expression) é convertido em tipo IOrderedQueryable<T> e retornado.

O comportamento da consulta que ocorre como resultado da execução de uma árvore de expressão 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 ele executa um tipo secundário dos elementos de em ordem decrescente source , com base na chave obtida invocando keySelector em cada elemento de source. Todas as ordens de classificação estabelecidas anteriormente são preservadas. O comparer parâmetro é usado para comparar valores de chave.

Aplica-se a