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 nasource
sequê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 asource
sequê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 keySelector
for 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 Salary
maior 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.00
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, defina a Employee
classe que possui três propriedades: Name
, Department
e 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 Employee
objetos:
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 Employee
objetos por departamentos em ordem decrescente usando o OrderByDescendig
método e depois classifique os Employee
objetos 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 foreach
and 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.