Gegevens sorteren (C#)
Met een sorteerbewerking worden de elementen van een reeks gesorteerd op basis van een of meer kenmerken. Het eerste sorteercriterium voert een primaire sortering uit op de elementen. Door een tweede sorteercriterium op te geven, kunt u de elementen in elke primaire sorteergroep sorteren.
Belangrijk
In deze voorbeelden wordt een System.Collections.Generic.IEnumerable<T> gegevensbron gebruikt. Gegevensbronnen op System.Linq.IQueryProvider basis van het gebruik van System.Linq.IQueryable<T> gegevensbronnen en expressiestructuren. Expressiestructuren hebben beperkingen voor de toegestane C#-syntaxis. Bovendien kan elke IQueryProvider
gegevensbron, zoals EF Core , meer beperkingen opleggen. Raadpleeg de documentatie voor uw gegevensbron.
In de volgende afbeelding ziet u de resultaten van een alfabetische sorteerbewerking op een reeks tekens:
De standaardqueryoperatormethoden waarmee gegevens worden gesorteerd, worden weergegeven in de volgende sectie.
Methoden
Methodenaam | Beschrijving | Syntaxis van C#-queryexpressie | Meer informatie |
---|---|---|---|
Orderby | Sorteert waarden in oplopende volgorde. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | Sorteert waarden in aflopende volgorde. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
ThenBy | Voert een secundaire sortering in oplopende volgorde uit. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
ThenByDescending | Voert een secundaire sortering in aflopende volgorde uit. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Terugboeken | Hiermee wordt de volgorde van de elementen in een verzameling omgekeerd. | Niet van toepassing. | Enumerable.Reverse Queryable.Reverse |
Notitie
In de volgende voorbeelden in dit artikel worden de algemene gegevensbronnen voor dit gebied gebruikt.
Elk Student
heeft een cijferniveau, een primaire afdeling en een reeks scores. Een Teacher
heeft ook een City
eigenschap die de campus identificeert waar de docent klassen heeft. A Department
heeft een naam en een verwijzing naar een Teacher
persoon die als afdelingshoofd fungeert.
U vindt de voorbeeldgegevensset in de bronopslagplaats.
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; }
}
Primaire oplopend sorteren
In het volgende voorbeeld ziet u hoe u de orderby
component in een LINQ-query gebruikt om de matrix van docenten te sorteren op familienaam, in oplopende volgorde.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
De equivalente query die is geschreven met behulp van de methodesyntaxis, wordt weergegeven in de volgende code:
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Primaire aflopende sorteervolgorde
In het volgende voorbeeld ziet u hoe u de orderby descending
component in een LINQ-query gebruikt om de docenten te sorteren op familienaam, in aflopende volgorde.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last descending
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
De equivalente query die is geschreven met behulp van de methodesyntaxis, wordt weergegeven in de volgende code:
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Secundair oplopend sorteren
In het volgende voorbeeld ziet u hoe u de orderby
component in een LINQ-query gebruikt om een primaire en secundaire sortering uit te voeren. De leraren worden voornamelijk gesorteerd op stad en secundair op hun familienaam, beide in oplopende volgorde.
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}");
}
De equivalente query die is geschreven met behulp van de methodesyntaxis, wordt weergegeven in de volgende code:
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}");
}
Secundair aflopend sorteren
In het volgende voorbeeld ziet u hoe u de orderby descending
component in een LINQ-query gebruikt om een primaire sortering, in oplopende volgorde en een secundaire sortering, in aflopende volgorde uit te voeren. De leraren worden voornamelijk gesorteerd op stad en secundair op hun familienaam.
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}");
}
De equivalente query die is geschreven met behulp van de methodesyntaxis, wordt weergegeven in de volgende code:
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}");
}