Sortowanie danych (C#)
Operacja sortowania porządkuje elementy sekwencji na podstawie co najmniej jednego atrybutu. Pierwsze kryterium sortowania wykonuje sortowanie podstawowe dla elementów. Określając drugie kryterium sortowania, można sortować elementy w każdej podstawowej grupie sortowania.
Ważne
Te przykłady używają System.Collections.Generic.IEnumerable<T> źródła danych. Źródła danych oparte na System.Linq.IQueryProvider System.Linq.IQueryable<T> źródłach danych i drzewach wyrażeń. Drzewa wyrażeń mają ograniczenia dotyczące dozwolonej składni języka C#. Ponadto każde IQueryProvider
źródło danych, takie jak EF Core , może nakładać więcej ograniczeń. Zapoznaj się z dokumentacją źródła danych.
Poniższa ilustracja przedstawia wyniki operacji sortowania alfabetycznego w sekwencji znaków:
Standardowe metody operatorów zapytań, które sortują dane, są wymienione w poniższej sekcji.
Metody
Nazwa metody | opis | Składnia wyrażeń zapytań języka C# | Więcej informacji |
---|---|---|---|
Kolejność według | Sortuje wartości w kolejności rosnącej. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | Sortuje wartości w kolejności malejącej. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
Następnie | Wykonuje sortowanie pomocnicze w kolejności rosnącej. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
NastępnieByDescending | Wykonuje sortowanie pomocnicze w kolejności malejącej. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Wycofaj | Odwraca kolejność elementów w kolekcji. | Nie dotyczy. | Enumerable.Reverse Queryable.Reverse |
Uwaga
W poniższych przykładach w tym artykule użyto typowych źródeł danych dla tego obszaru.
Każdy z nich Student
ma poziom klasy, dział podstawowy i serię wyników. Obiekt Teacher
ma również właściwość identyfikującą City
kampus, w którym nauczyciel posiada zajęcia. Element Department
ma nazwę i odwołanie do osoby Teacher
, która służy jako szef działu.
Przykładowy zestaw danych można znaleźć w repozytorium źródłowym.
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; }
}
Podstawowy sortowanie rosnące
W poniższym przykładzie pokazano, jak używać orderby
klauzuli w zapytaniu LINQ w celu sortowania tablicy nauczycieli według nazwy rodziny w kolejności rosnącej.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
Równoważne zapytanie napisane przy użyciu składni metody jest wyświetlane w następującym kodzie:
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Sortowanie malejące podstawowe
W następnym przykładzie pokazano, jak za pomocą klauzuli orderby descending
w zapytaniu LINQ posortować nauczycieli według nazwy rodziny w kolejności malejącej.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last descending
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
Równoważne zapytanie napisane przy użyciu składni metody jest wyświetlane w następującym kodzie:
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Pomocnicze sortowanie rosnące
W poniższym przykładzie pokazano, jak używać klauzuli orderby
w zapytaniu LINQ w celu wykonania sortowania podstawowego i pomocniczego. Nauczyciele są sortowani przede wszystkim przez miasto i po drugie według ich nazwiska rodzinnego, zarówno w kolejności rosnącej.
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}");
}
Równoważne zapytanie napisane przy użyciu składni metody jest wyświetlane w następującym kodzie:
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}");
}
Pomocniczy sortowanie malejące
W następnym przykładzie pokazano, jak użyć orderby descending
klauzuli w zapytaniu LINQ w celu wykonania sortowania podstawowego w kolejności rosnącej i sortowania pomocniczego w kolejności malejącej. Nauczyciele są sortowani przede wszystkim przez miasto i po drugie według ich nazwiska rodzinnego.
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}");
}
Równoważne zapytanie napisane przy użyciu składni metody jest wyświetlane w następującym kodzie:
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}");
}