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 nos 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 | Description | Sintaxe da expressão de consulta C# | Mais Informações |
---|---|---|---|
OrderBy | Classifica os valores em ordem crescente. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | Classifica os valores em ordem decrescente. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
EntãoPor | Executa uma classificação secundária em ordem crescente. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
EntãoPorDescendente | Executa uma classificação secundária em ordem decrescente. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Inverter | Inverte a ordem dos elementos em uma coleção. | Não aplicável. | Enumerable.Reverse Queryable.Reverse |
Os exemplos a seguir neste artigo usam as fontes de dados comuns para essa á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
um tem um nível de nota, um departamento primário e uma série de pontuações. A Teacher
também tem uma City
propriedade que identifica o campus onde o professor tem aulas. A Department
tem um nome, e uma referência a um Teacher
que serve como chefe de departamento.
Classificação Primária Ascendente
O exemplo a seguir demonstra como usar a orderby
cláusula 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 sintaxe de método é mostrada no código a seguir:
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Classificação Descendente Primária
O próximo exemplo demonstra como usar a orderby descending
cláusula em uma consulta LINQ para classificar os professores por nome de 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 sintaxe de método é mostrada no código a seguir:
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Classificação Secundária Ascendente
O exemplo a seguir demonstra como usar a orderby
cláusula em uma consulta LINQ para executar uma classificação primária e secundária. Os professores são ordenados principalmente por cidade e secundariamente pelo seu nome de 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 sintaxe de método é mostrada no código a seguir:
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 Secundária Descendente
O próximo exemplo demonstra como usar a orderby descending
cláusula em uma consulta LINQ para executar uma classificação primária, em ordem crescente, e uma classificação secundária, em ordem decrescente. Os professores são ordenados principalmente por cidade e secundariamente pelo seu nome de 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 sintaxe de método é mostrada no código a seguir:
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}");
}
Consulte também
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários