C# - Ordenando uma lista de objetos - III
Hoje veremos como classificar uma lista de objetos usando Comparison<T> e uma implementação de ICompare<T>. |
Continuando a segunda parte do artigo vamos realizar agora a ordenação da lista de objetos usando LINQ através do método Sort() e também usando Query Expressions.
2- Ordenando com LINQ
Podemos também usar os operadores OrderBy OrderByDescending do LINQ para ordenar uma lista local. Isso cria uma nova lista com os elementos da lista original classificados de acordo com uma chave.
O OrderBy classifica a coleção em ordem crescente por padrão porque a palavra-chave Ascending é opcional. Use a palavra-chave Descending para classificar a coleção em ordem decrescente.
A seguir temos a implementação usando LINQ:
E o resultado obtido:
3- Usando Query Expressions
As
Query Expressions ou Expressões de consulta
é uma expressão escrita usando a sintaxe de consulta LINQ e contém um conjunto
de cláusulas e usa uma expressão de consulta semelhante ao SQL.
A expressão de consulta deve começar com a cláusula from
e terminar com uma cláusula select ou group.
Para o nosso exemplo basta criar a Query Expression para ordernar a lista e assim podemos substituir :
List<Aluno> alunosOrdenados = alunos.OrderBy(x => x.Idade).ToList(); |
por :
List<Aluno> alunosOrdenados = (from e in alunos orderby e.Idade select e).ToList(); |
Obtendo o mesmo resultado abaixo:
4- Ordenação múltipla
Você pode classificar a coleção em vários campos separados por vírgula. A coleção fornecida seria primeiro classificada com base no primeiro campo e, em seguida, se o valor do primeiro campo fosse o mesmo para dois elementos, ele usaria o segundo campo para classificação e assim por diante.
static void Main(string[] args)
{
List<Aluno> listaAluno = new List<Aluno>() {
new Aluno() { Id = 1, Nome= "Maria", Idade = 18 } ,
new Aluno() { Id = 2, Nome = "Jefferson", Idade = 15 } ,
new Aluno() { Id = 3, Nome = "Beatriz", Idade = 25 } ,
new Aluno() { Id = 4, Nome = "Raimundo" , Idade = 20 } ,
new Aluno() { Id = 5, Nome = "Ronaldo" , Idade = 19 },
new Aluno() { Id = 6, Nome = "Ronaldo" , Idade = 18 }
};
var resultado = from a in listaAluno
orderby a.Nome, a.Idade
select new { a.Nome, a.Idade };
foreach(var aluno in resultado)
{
Console.WriteLine($"{aluno.Nome} - {aluno.Idade}");
}
Console.ReadLine();
}
|
Obtendo o seguinte resultado:
Destacando que :
Pegue o projeto aqui: CShp_ClassificarLista3.zip
"Ai daqueles que nas suas camas intentam
a iniqüidade, e maquinam o mal; à luz da alva o praticam, porque está no poder
da sua mão!"
Miquéias 2:1
Referências:
-
C# - Tasks x Threads.
Qual a diferença -
-
VB .NET - Datas,
horas: conceitos e operações
-
C# - Programação
Assíncrona como : Asycn e Task
-
O tratamento de datas
no VB.NET
-
C# - Obtendo a data e
a hora por TimeZone
-
C# - O Struct Guid - Macoratti.net
-
DateTime -
Macoratti.net
-
Formatação de data e
hora para uma cultura .
-
-
C# - Calculando a
diferença entre duas datas
-
C# - Fundamentos :
Definindo DateTime como Null