LINQ OrderBy

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 na sourcesequência.
  • TKeyé o tipo de chave retornado por keySelector.
  • O sourcerepresenta uma sequência de entrada para classificar, que tem o tipo IEnumrable<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 ArgumentNullExceptionif the sourceor keySelectoris 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 9Linguagem de código:  C#  ( cs )

Como funciona.

Primeiro, defina uma lista de inteiros chamados scorese 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 OrderBy()método. O OrderBy()método retorna a sortedScorescom o IEnumerable<int>tipo, contendo elementos da scoressequência, mas em ordem crescente:

var sortedScores = scores.OrderBy(n => n);Linguagem de código:  C#  ( cs )

A expressão lambda n => nespecifica a chave usada para classificação. Neste caso, é o próprio valor inteiro.

Terceiro, escreva todos os elementos de sortedScoresno console usando um foreachloop 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 SophiaLinguagem 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 OrderBycláusula. A expressão lambda name => nameespecifica 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 sortedNameslista 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 Employeeobjetos 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.00Linguagem de código:  C#  ( cs )

Como funciona.

Primeiro, defina a Employeeclasse que possui três propriedades: Name, Departmente 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 Employeeobjetos:

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 Employeeobjetos por seus nomes usando o OrderBy()método. A expressão lambda e => e.Nameespecifica 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 Employeeobjetos 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 employeeslista salaryem 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.00Linguagem 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *