LINQ ThenByDescendente

Resumo : neste tutorial, você aprenderá como usar o ThenByDescending()método LINQ para classificar uma sequência em ordem decrescente com base em uma chave secundária.

Introdução ao método LINQ ThenByDescendente()

O método LINQ ThenByDescending()classifica uma sequência em ordem decrescente com base em uma chave secundária após a sequência ter sido classificada por uma chave primária usando o método OrderBy()ou OrderByDescending().

public static IOrderedEnumerable<TSource> ThenByDescending<TSource, TKey> (
    this IOrderedEnumerable<TSource> source, 
    Func<TSource, TKey> keySelector
);Linguagem de código:  C#  ( cs )

Nesta sintaxe:

  • TSourceé o tipo de elementos na sourcesequência.
  • TKeyé o tipo de chave de classificação.
  • sourceé a sequência de entrada a ser classificada.
  • keySelectoré uma função que seleciona uma chave para classificar a sourcesequência.

O ThenByDescending()método retorna uma nova sequência classificada por uma chave em ordem decrescente. O tipo de sequência resultante é an IOrderedEnumerable<TElement>.

Se a origem ou keySelectorfor nula, o método método ThenByDescending()lançará um arquivo ArgumentNullException.

Exemplo do método LINQ ThenByDescendente()

O programa a seguir usa o OrderByDesending()método para classificar uma lista de funcionários por departamentos em ordem decrescente primeiro e depois usa o ThenByDescending()método para classificar os funcionários em cada departamento do Salarymaior para o menor:

using static System.Console;

class Employee
{
    public string? Name { get; set; }
    public string? Department { get; set; }
    public int Salary { get; set; }
}
class Program
{
    public static void Main()
    {
        var employees = new List<Employee>()
        {
            new Employee { Name = "John", Department = "HR", Salary = 50000 },
            new Employee { Name = "Jane", Department = "IT", Salary = 60000 },
            new Employee { Name = "Bob", Department = "HR", Salary = 45000 },
            new Employee { Name = "Sara", Department = "IT", Salary = 55000 },
            new Employee { Name = "Tom", Department = "IT", Salary = 65000 }
        };

        var results = employees.OrderByDescending(e => e.Department)
                               .ThenByDescending(e => e.Salary);

        foreach (var e in results)
        {
            WriteLine($"{e.Department} - {e.Name} - {e.Salary:C}");
        }
    }
}Linguagem de código:  C#  ( cs )

Saída:

IT - Tom - $65,000.00
IT - Jane - $60,000.00
IT - Sara - $55,000.00
HR - John - $50,000.00
HR - Bob - $45,000.00Linguagem de código:  C#  ( cs )

Como funciona.

Primeiro, defina a Employeeclasse que possui três propriedades: Name, Departmente Salary:

class Employee
{
    public string? Name { get; set; }
    public string? Department { get; set; }
    public int Salary { get; set; }
}Linguagem de código:  C#  ( cs )

Segundo, crie uma nova lista com cinco Employeeobjetos:

var employees = new List<Employee>() 
{
    new Employee { Name = "John", Department = "HR", Salary = 50000 },
    new Employee { Name = "Jane", Department = "IT", Salary = 60000 },
    new Employee { Name = "Bob", Department = "HR", Salary = 45000 },
    new Employee { Name = "Sara", Department = "IT", Salary = 55000 },
    new Employee { Name = "Tom", Department = "IT", Salary = 65000 }
};Linguagem de código:  C#  ( cs )

Terceiro, classifique os Employeeobjetos por departamentos em ordem decrescente usando o OrderByDescendigmétodo e depois classifique os Employeeobjetos em cada departamento por salário usando o ThenByDescending()método:

var results = employees.OrderByDescending(e => e.Department)
                       .ThenByDescending(e => e.Salary);Linguagem de código:  C#  ( cs )

Por fim, escreva os funcionários no console usando o método foreachand WriteLine():

foreach (var e in results)
{
    WriteLine($"{e.Department} - {e.Name} - {e.Salary:C}");
}Linguagem de código:  C#  ( cs )

Resumo

  • Use o método LINQ ThenByDescending()para classificar elementos em uma sequência em ordem decrescente por uma chave secundária, após a sequência ter sido classificada por uma chave primária.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *