Ler em inglês

Compartilhar via


Queryable.OrderByDescending Método

Definição

Classifica os elementos de uma sequência em ordem decrescente.

Sobrecargas

OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>)

Classifica os elementos de uma sequência em ordem decrescente usando um comparador especificado.

OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

Classifica os elementos de uma sequência em ordem decrescente de acordo com uma chave.

OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>)

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

Classifica os elementos de uma sequência em ordem decrescente usando um comparador especificado.

C#
public static System.Linq.IOrderedQueryable<TSource> OrderByDescending<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey> comparer);
C#
public static System.Linq.IOrderedQueryable<TSource> OrderByDescending<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector, System.Collections.Generic.IComparer<TKey>? comparer);

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

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

Parâmetros

source
IQueryable<TSource>

Uma sequência de valores a serem ordenados.

keySelector
Expression<Func<TSource,TKey>>

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

comparer
IComparer<TKey>

Um IComparer<T> para comparar chaves.

Retornos

Um IOrderedQueryable<T> 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 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) para classificar os elementos de uma sequência em ordem decrescente usando um comparador personalizado.

C#
/// <summary>
/// This IComparer class sorts by the fractional part of the decimal number.
/// </summary>
public class SpecialComparer : IComparer<decimal>
{
    /// <summary>
    /// Compare two decimal numbers by their fractional parts.
    /// </summary>
    /// <param name="d1">The first decimal to compare.</param>
    /// <param name="d2">The second decimal to compare.</param>
    /// <returns>1 if the first decimal's fractional part
    /// is greater than the second decimal's fractional part,
    /// -1 if the first decimal's fractional
    /// part is less than the second decimal's fractional part,
    /// or the result of calling Decimal.Compare()
    /// if the fractional parts are equal.</returns>
    public int Compare(decimal d1, decimal d2)
    {
        decimal fractional1, fractional2;

        // Get the fractional part of the first number.
        try
        {
            fractional1 = decimal.Remainder(d1, decimal.Floor(d1));
        }
        catch (DivideByZeroException)
        {
            fractional1 = d1;
        }
        // Get the fractional part of the second number.
        try
        {
            fractional2 = decimal.Remainder(d2, decimal.Floor(d2));
        }
        catch (DivideByZeroException)
        {
            fractional2 = d2;
        }

        if (fractional1 == fractional2)
            return Decimal.Compare(d1, d2);
        else if (fractional1 > fractional2)
            return 1;
        else
            return -1;
    }
}

public static void OrderByDescendingEx1()
{
    List<decimal> decimals =
        new List<decimal> { 6.2m, 8.3m, 0.5m, 1.3m, 6.3m, 9.7m };

    // Sort the decimal values in descending order
    // by using a custom comparer.
    IEnumerable<decimal> query =
        decimals.AsQueryable()
        .OrderByDescending(num => num, new SpecialComparer());

    foreach (decimal num in query)
        Console.WriteLine(num);
}

/*
    This code produces the following output:

    9.7
    0.5
    8.3
    6.3
    1.3
    6.2
*/

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 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) método gera um MethodCallExpression que representa chamar OrderByDescending<TSource,TKey>(IQueryable<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 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>, IComparer<TKey>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele classifica os elementos de source em ordem decrescente, com base na chave obtida invocando keySelector em cada elemento de source. O comparer parâmetro é usado para comparar chaves.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0

OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>)

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

Classifica os elementos de uma sequência em ordem decrescente de acordo com uma chave.

C#
public static System.Linq.IOrderedQueryable<TSource> OrderByDescending<TSource,TKey> (this System.Linq.IQueryable<TSource> source, System.Linq.Expressions.Expression<Func<TSource,TKey>> keySelector);

Parâmetros de tipo

TSource

O tipo dos elementos de source.

TKey

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

Parâmetros

source
IQueryable<TSource>

Uma sequência de valores a serem ordenados.

keySelector
Expression<Func<TSource,TKey>>

Uma função para extrair uma chave de um 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 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) método gera um MethodCallExpression que representa chamar OrderByDescending<TSource,TKey>(IQueryable<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 OrderByDescending<TSource,TKey>(IQueryable<TSource>, Expression<Func<TSource,TKey>>) depende da implementação do tipo do source parâmetro. O comportamento esperado é que ele classifica os elementos de source em ordem decrescente, com base na chave obtida invocando keySelector em cada elemento de source.

Aplica-se a

.NET 9 e outras versões
Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1
UWP 10.0