Classificando dados (C#)
Uma operação de classificação ordena os elementos de uma sequência com base em um ou mais atributos. O primeiro critério de classificação executa uma classificação primária dos elementos. Especificando um segundo critério de classificação, você pode classificar os elementos dentro de cada grupo de classificação primário.
A ilustração a seguir mostra os resultados de uma operação de classificação alfabética em uma sequência de caracteres:
Os métodos de operador de consulta padrão que classificam dados estão listados na seção a seguir.
Métodos
Nome do método | Descrição | Sintaxe de expressão de consulta C# | Mais informações |
---|---|---|---|
OrderBy | Classifica valores em ordem crescente. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | Classifica valores em ordem decrescente. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
ThenBy | Executa uma classificação secundária em ordem crescente. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
ThenByDescending | Executa uma classificação secundária em ordem decrescente. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Reverse | Inverte a ordem dos elementos em uma coleção. | Não aplicável. | Enumerable.Reverse Queryable.Reverse |
Os seguintes exemplos neste artigo usam as fontes de dados comuns para esta área:
public enum GradeLevel
{
FirstYear = 1,
SecondYear,
ThirdYear,
FourthYear
};
public class Student
{
public required string FirstName { get; init; }
public required string LastName { get; init; }
public required int ID { get; init; }
public required GradeLevel Year { get; init; }
public required List<int> Scores { get; init; }
public required int DepartmentID { get; init; }
}
public class Teacher
{
public required string First { get; init; }
public required string Last { get; init; }
public required int ID { get; init; }
public required string City { get; init; }
}
public class Department
{
public required string Name { get; init; }
public int ID { get; init; }
public required int TeacherID { get; init; }
}
Cada Student
tem um nível de escolaridade, um departamento primário e uma série de pontuações. Um Teacher
também tem uma propriedade City
que identifica o campus onde o docente ministra aulas. Um Department
tem um nome, e uma referência a um Teacher
que serve como o chefe do departamento.
Classificação crescente primária
O exemplo a seguir demonstra como usar a cláusula orderby
em uma consulta LINQ para classificar a matriz de professores por nome de família, em ordem crescente.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
A consulta equivalente escrita usando a sintaxe do método é mostrada no seguinte código:
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Classificação decrescente primária
O exemplo a seguir demonstra como usar a cláusula orderby descending
em uma consulta LINQ para classificar os professores pelo nome da família, em ordem decrescente.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last descending
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
A consulta equivalente escrita usando a sintaxe do método é mostrada no seguinte código:
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Classificação crescente secundária
O exemplo a seguir demonstra como usar a cláusula orderby
em uma consulta LINQ para executar uma classificação primária e secundária. Os professores são classificados principalmente pela cidade e, em segundo lugar, pelo nome da família, ambos em ordem crescente.
IEnumerable<(string, string)> query = from teacher in teachers
orderby teacher.City, teacher.Last
select (teacher.Last, teacher.City);
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
A consulta equivalente escrita usando a sintaxe do método é mostrada no seguinte código:
IEnumerable<(string, string)> query = teachers
.OrderBy(teacher => teacher.City)
.ThenBy(teacher => teacher.Last)
.Select(teacher => (teacher.Last, teacher.City));
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
Classificação decrescente secundária
O exemplo seguinte demonstra como usar a cláusula orderby descending
em uma consulta de LINQ para executar uma classificação primária, em ordem crescente e uma classificação secundária, em ordem decrescente. Os professores são classificados principalmente pela cidade e, em segundo lugar, pelo nome da família.
IEnumerable<(string, string)> query = from teacher in teachers
orderby teacher.City, teacher.Last descending
select (teacher.Last, teacher.City);
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
A consulta equivalente escrita usando a sintaxe do método é mostrada no seguinte código:
IEnumerable<(string, string)> query = teachers
.OrderBy(teacher => teacher.City)
.ThenByDescending(teacher => teacher.Last)
.Select(teacher => (teacher.Last, teacher.City));
foreach ((string last, string city) in query)
{
Console.WriteLine($"City: {city}, Last Name: {last}");
}
Confira também
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de