Resumo : neste tutorial, você aprenderá como usar OrderBy()
o método LINQ para classificar os elementos de uma sequência em ordem crescente.
Introdução ao método LINQ OrderBy
O OrderBy()
método classifica os elementos de uma sequência em ordem crescente:
IOrderedEnumerable<TSource> OrderBy<TSource, TKey>(
this IEnumerable<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 retornado porkeySelector
.- O
source
representa uma sequência de entrada para classificar, que tem o tipoIEnumrable<TSource>
. - A
keySelector
é uma função para extrair uma chave de um elemento.
O OrderBy()
método retorna um IOrderedEnumerable<TSource>
que contém os elementos classificados especificados por uma chave.
O OrderBy()
método lança um ArgumentNullException
if the source
or keySelector
is null
.
Exemplos de LINQ OrderBy
Vejamos alguns exemplos de uso do OrderBy()
método LINQ.
1) Usando o método LINQ OrderBy() para classificar uma sequência de números
O programa a seguir demonstra como usar o OrderBy()
método para classificar uma sequência de números:
using static System.Console;
var scores = new List<int> { 1, 5, 2, 3, 8, 7 ,9 };
var sortedScores = scores.OrderBy(n => n);
foreach (var score in sortedScores)
{
Write($"{score} ");
}
Linguagem de código: C# ( cs )
Saída:
1 2 3 5 7 8 9
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, defina uma lista de inteiros chamados scores
e inicialize-a com uma sequência de inteiros não ordenados:
var scores = new List<int> { 1, 5, 2, 3, 8, 7 ,9 };
Linguagem de código: C# ( cs )
Segundo, classifique a sequência de pontuações usando o
método. O OrderBy()
método retorna a OrderBy()
sortedScores
com o IEnumerable<int>
tipo, contendo elementos da scores
sequência, mas em ordem crescente:
var sortedScores = scores.OrderBy(n => n);
Linguagem de código: C# ( cs )
A expressão lambda n => n
especifica a chave usada para classificação. Neste caso, é o próprio valor inteiro.
Terceiro, escreva todos os elementos de sortedScores
no console usando um foreach
loop e Write()
um método:
foreach (var score in sortedScores)
{
Write($"{score} ");
}
Linguagem de código: C# ( cs )
2) Usando o método LINQ OrderBy() para classificar uma sequência de strings
O programa a seguir demonstra como usar o OrderBy()
método para classificar uma sequência de strings:
using static System.Console;
var names = new List<string> { "Olivia","Ava", "Ethan", "Sophia", "Lucas" };
var sortedNames = names.OrderBy(name=>name);
foreach (var name in sortedNames)
{
Write($"{name} ");
}
Linguagem de código: C# ( cs )
Saída:
Ava Ethan Lucas Olivia Sophia
Linguagem de código: C# ( cs )
Como funciona.
Primeiro, crie um List<string>
que contenha 5 nomes:
var names = new List<string> { "Olivia","Ava", "Ethan", "Sophia", "Lucas" };
Linguagem de código: C# ( cs )
Segundo, classifique a lista de nomes usando a OrderBy
cláusula. A expressão lambda name => name
especifica a chave do pedido, que é o próprio valor da string neste caso:
var sortedNames = names.OrderBy(name=>name);
Linguagem de código: C# ( cs )
Terceiro, escreva cada nome da sortedNames
lista no console:
foreach (var name in sortedNames)
{
Write($"{name} ");
}
Linguagem de código: C# ( cs )
3) Usando o método LINQ OrderBy() para classificar uma sequência de objetos por suas propriedades
O programa a seguir demonstra como usar o OrderBy()
método para classificar uma lista de Employee
objetos por nomes em ordem alfabética:
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.Name);
foreach (var employee in results)
{
WriteLine($"{employee.Name} - {employee.Salary:C}");
}
}
}
Linguagem de código: C# ( cs )
Saída:
Bob - $45,000.00
Jane - $60,000.00
John - $50,000.00
Sara - $55,000.00
Tom - $65,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 um novo List<Employee>
e inicialize-o com alguns 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: PHP ( php )
Terceiro, classifique os Employee
objetos por seus nomes usando o OrderBy()
método. A expressão lambda e => e.Name
especifica a chave de classificação ( Name
) para ordenação.
var results = employees.OrderBy(e => e.Name);
Linguagem de código: C# ( cs )
Terceiro, escreva a lista ordenada de Employee
objetos no console:
foreach (var employee in results)
{
WriteLine($"{employee.Name} - {employee.Salary:C}");
}
Linguagem de código: C# ( cs )
Da mesma forma, o exemplo a seguir demonstra como classificar a employees
lista salary
em ordem crescente:
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.Salary);
foreach (var employee in results)
{
WriteLine($"{employee.Name} - {employee.Salary:C}");
}
}
}
Linguagem de código: C# ( cs )
Saída:
Bob - $45,000.00
John - $50,000.00
Sara - $55,000.00
Jane - $60,000.00
Tom - $65,000.00
Linguagem de código: C# ( cs )
Resumo
- Use o método LINQ
OrderBy()
para classificar uma sequência de objetos por uma chave em ordem crescente.