Dela via


Sortera data (C#)

En sorteringsåtgärd beställer elementen i en sekvens baserat på ett eller flera attribut. Det första sorteringskriteriet utför en primär sortering av elementen. Genom att ange ett andra sorteringsvillkor kan du sortera elementen i varje primär sorteringsgrupp.

Viktigt!

Dessa exempel använder en System.Collections.Generic.IEnumerable<T> datakälla. Datakällor baserade på System.Linq.IQueryProvider användning av System.Linq.IQueryable<T> datakällor och uttrycksträd. Uttrycksträd har begränsningar för den tillåtna C#-syntaxen. Dessutom kan varje IQueryProvider datakälla, till exempel EF Core , införa fler begränsningar. Kontrollera dokumentationen för din datakälla.

Följande bild visar resultatet av en alfabetisk sorteringsåtgärd på en sekvens med tecken:

Bild som visar en alfabetisk sorteringsåtgärd.

Standardmetoderna för frågeoperatorer som sorterar data visas i följande avsnitt.

Metoder

Metodnamn beskrivning Syntax för C#-frågeuttryck Mer information
OrderBy Sorterar värden i stigande ordning. orderby Enumerable.OrderBy

Queryable.OrderBy
OrderByDescending Sorterar värden i fallande ordning. orderby … descending Enumerable.OrderByDescending

Queryable.OrderByDescending
ThenBy Utför en sekundär sortering i stigande ordning. orderby …, … Enumerable.ThenBy

Queryable.ThenBy
ThenByDescending Utför en sekundär sortering i fallande ordning. orderby …, … descending Enumerable.ThenByDescending

Queryable.ThenByDescending
Återför Ändrar ordningen på elementen i en samling. Ej tillämpbart. Enumerable.Reverse

Queryable.Reverse

Kommentar

I följande exempel i den här artikeln används vanliga datakällor för det här området.
Var Student och en har en betygsnivå, en primär avdelning och en serie poäng. En Teacher har också en City egenskap som identifierar det campus där läraren har klasser. A Department har ett namn och en referens till en Teacher som fungerar som avdelningschef.
Du hittar exempeldatauppsättningen i källdatabasen.

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

Primär stigande sortering

I följande exempel visas hur du använder orderby -satsen i en LINQ-fråga för att sortera matrisen med lärare efter familjenamn i stigande ordning.

IEnumerable<string> query = from teacher in teachers
                            orderby teacher.Last
                            select teacher.Last;

foreach (string str in query)
{
    Console.WriteLine(str);
}

Motsvarande fråga som skrivits med hjälp av metodsyntaxen visas i följande kod:

IEnumerable<string> query = teachers
    .OrderBy(teacher => teacher.Last)
    .Select(teacher => teacher.Last);

foreach (string str in query)
{
    Console.WriteLine(str);
}

Primär fallande sortering

I nästa exempel visas hur du använder orderby descending -satsen i en LINQ-fråga för att sortera lärarna efter familjenamn i fallande ordning.

IEnumerable<string> query = from teacher in teachers
                            orderby teacher.Last descending
                            select teacher.Last;

foreach (string str in query)
{
    Console.WriteLine(str);
}

Motsvarande fråga som skrivits med hjälp av metodsyntaxen visas i följande kod:

IEnumerable<string> query = teachers
    .OrderByDescending(teacher => teacher.Last)
    .Select(teacher => teacher.Last);

foreach (string str in query)
{
    Console.WriteLine(str);
}

Sekundär stigande sortering

I följande exempel visas hur du använder orderby -satsen i en LINQ-fråga för att utföra en primär och sekundär sortering. Lärarna sorteras främst efter stad och i andra hand efter deras efternamn, båda i stigande ordning.

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

Motsvarande fråga som skrivits med hjälp av metodsyntaxen visas i följande kod:

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

Sekundär fallande sortering

Nästa exempel visar hur du använder orderby descending -satsen i en LINQ-fråga för att utföra en primär sortering, i stigande ordning och en sekundär sortering, i fallande ordning. Lärarna sorteras främst efter stad och i andra hand efter deras efternamn.

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

Motsvarande fråga som skrivits med hjälp av metodsyntaxen visas i följande kod:

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

Se även