Ordinamento dei dati (C#)
Un'operazione di ordinamento consente di ordinare gli elementi di una sequenza in base a uno o più attributi. Il primo criterio di ordinamento consente di applicare un ordinamento principale agli elementi. Specificando un secondo criterio di ordinamento, è possibile ordinare gli elementi all'interno di ogni gruppo di ordinamento principale.
La figura seguente illustra i risultati di un'operazione di ordinamento alfabetico in una sequenza di caratteri:
La sezione seguente elenca i metodi dell'operatore query standard che ordina i dati.
Metodi
Nome metodo | Descrizione | Sintassi di espressione della query C# | Ulteriori informazioni |
---|---|---|---|
OrderBy | Ordina i valori in ordine crescente. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | Ordina i valori in ordine decrescente. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
ThenBy | Esegue un ordinamento secondario crescente. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
ThenByDescending | Esegue un ordinamento secondario decrescente. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Storna | Inverte l'ordine degli elementi in una Collection. | Non applicabile. | Enumerable.Reverse Queryable.Reverse |
Gli esempi che seguono in questo articolo usano le origini dati comuni per questa area:
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; }
}
Ogni Student
ha un livello di classe, un reparto primario e una serie di punteggi. Un Teacher
ha anche una proprietà City
che identifica il campus in cui l'insegnante tiene le lezioni. Un Department
ha un nome e un riferimento a un Teacher
che funge da responsabile del reparto.
Ordinamento primario crescente
L'esempio seguente illustra come utilizzare la clausola orderby
in una query LINQ per ordinare l'array degli insegnanti in base al cognome, in ordine crescente.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
La query equivalente scritta usando la sintassi del metodo è mostrata nel codice seguente:
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Ordinamento primario decrescente
Il prossimo esempio illustra come utilizzare la clausola orderby descending
in una query LINQ per ordinare gli insegnanti in base al cognome, in ordine decrescente.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last descending
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
La query equivalente scritta usando la sintassi del metodo è mostrata nel codice seguente:
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Ordinamento secondario crescente
L'esempio seguente illustra come utilizzare la clausola orderby
in una query LINQ per eseguire un ordinamento primario e secondario. Gli insegnanti sono ordinati primariamente per città e secondariamente per cognome, entrambi in ordine 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}");
}
La query equivalente scritta usando la sintassi del metodo è mostrata nel codice seguente:
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}");
}
Ordinamento secondario in ordine decrescente
L'esempio seguente illustra come usare la clausola orderby descending
in una query LINQ per eseguire un ordinamento primario, in ordine crescente, e un ordinamento secondario, in ordine decrescente. Gli insegnanti sono ordinati primariamente per città e secondariamente per cognome.
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}");
}
La query equivalente scritta usando la sintassi del metodo è mostrata nel codice seguente:
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}");
}
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per