Resumo : neste tutorial, você aprenderá como usar o ThenBy()
método LINQ para classificar uma sequência em ordem crescente com base em uma chave secundária.
Introdução ao método LINQ ThenBy()
O método LINQ ThenBy()
classifica uma sequência em ordem crescente 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> ThenBy<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 ThenBy()
método retorna uma nova sequência ordenada por uma chave em ordem crescente com o tipo IOrderedEnumerable<TSource>
.
Se source
ou keySelector
for nulo, o método método ThenBy()
lançará um ArgumentNullException
.
Exemplo do método LINQ ThenBy()
O exemplo a seguir usa o OrderBy()
para classificar uma lista de funcionários por departamento em ordem alfabética primeiro e, em seguida, usa o ThenBy()
método para classificar os funcionários em cada departamento do Salary
menor para o maior:
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.OrderBy(e => e.Department).ThenBy(e => e.Salary);
foreach (var e in results)
{
WriteLine($"{e.Department} - {e.Name} - {e.Salary:C}");
}
}
}
Linguagem de código: C# ( cs )
Saída:
HR - Bob - $45,000.00
HR - John - $50,000.00
IT - Sara - $55,000.00
IT - Jane - $60,000.00
IT - Tom - $65,000.00
Linguagem de código: texto simples ( texto simples )
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 crescente usando o OrderBy()
método e depois classifique os Employee
objetos em cada departamento por salário usando o ThenBy()
método:
var results = employees.OrderBy(e => e.Department)
.ThenBy(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
ThenBy()
o método LINQ para classificar elementos em uma sequência em ordem crescente por uma chave secundária, após a sequência ter sido classificada por uma chave primária em ordem crescente usando oOrderBy()
método.