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.

Exemplo de ordenação múltipla usando a sintaxe de consulta:
 
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:


José Carlos Macoratti