Share 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.

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

I följande exempel i den här artikeln används vanliga datakällor för det här området:

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

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.

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