Share via


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:

Afbeelding met een alfabetische sorteerbewerking.

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

In de volgende voorbeelden in dit artikel worden de algemene gegevensbronnen voor dit gebied gebruikt:

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; }
}

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.

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}");
}

Zie ook