Adatok rendezése (C#)

A rendezési művelet egy sorozat elemeit egy vagy több attribútum alapján rendezi. Az első rendezési feltétel elsődleges rendezést végez az elemeken. Egy második rendezési feltétel megadásával rendezheti az egyes elsődleges rendezési csoportok elemeit.

Az alábbi ábra egy betűrendes rendezési művelet eredményeit mutatja be egy karaktersorozaton:

Betűrendes rendezési műveletet megjelenítő ábra.

Az adatokat rendező szabványos lekérdezésoperátor-metódusok a következő szakaszban találhatók.

Metódusok

Metódus neve Leírás C# lekérdezési kifejezés szintaxisa További információ
OrderBy Növekvő sorrendbe rendezi az értékeket. orderby Enumerable.OrderBy

Queryable.OrderBy
OrderByDescending Csökkenő sorrendbe rendezi az értékeket. orderby … descending Enumerable.OrderByDescending

Queryable.OrderByDescending
ThenBy Másodlagos rendezést végez növekvő sorrendben. orderby …, … Enumerable.ThenBy

Queryable.ThenBy
ThenByDescending Másodlagos rendezést végez csökkenő sorrendben. orderby …, … descending Enumerable.ThenByDescending

Queryable.ThenByDescending
Megfordítás Megfordítja a gyűjtemény elemeinek sorrendjét. Nem alkalmazható. Enumerable.Reverse

Queryable.Reverse

A cikkben szereplő alábbi példák a terület közös adatforrásait használják:

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

Mindegyiknek Student van egy osztályszintje, egy elsődleges osztálya és egy sor pontszáma. Az A-nek Teacher is van egy City tulajdonsága, amely azonosítja azt a campust, ahol a tanár órákat tart. Az A-nek Department van egy neve, és egy olyan személyre Teacher való hivatkozás, aki az osztályvezető.

Elsődleges növekvő rendezés

Az alábbi példa bemutatja, hogyan használható a záradék egy orderby LINQ-lekérdezésben a tanárok tömbjének családnév szerinti rendezésére növekvő sorrendben.

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

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

A metódusszintaxissal írt egyenértékű lekérdezés a következő kódban jelenik meg:

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

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

Elsődleges csökkenő rendezés

A következő példa bemutatja, hogyan használható a záradék egy orderby descending LINQ-lekérdezésben a tanárok családnév szerinti rendezésére csökkenő sorrendben.

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

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

A metódusszintaxissal írt egyenértékű lekérdezés a következő kódban jelenik meg:

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

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

Másodlagos növekvő rendezés

Az alábbi példa bemutatja, hogyan használható a záradék egy orderby LINQ-lekérdezésben elsődleges és másodlagos rendezés végrehajtására. A tanárok elsősorban város, másodsorban pedig családnév szerint vannak rendezve, mind növekvő sorrendben.

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

A metódusszintaxissal írt egyenértékű lekérdezés a következő kódban jelenik meg:

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

Másodlagos csökkenő rendezés

A következő példa bemutatja, hogyan használható a záradék egy orderby descending LINQ-lekérdezésben az elsődleges rendezés, növekvő sorrendben és másodlagos rendezés csökkenő sorrendben történő végrehajtására. A tanárok elsősorban város, másodsorban pedig családnév szerint vannak rendezve.

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

A metódusszintaxissal írt egyenértékű lekérdezés a következő kódban jelenik meg:

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

Lásd még