Megosztás a következőn keresztül:


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.

Fontos

Ezek a minták adatforrást System.Collections.Generic.IEnumerable<T> használnak. Adatforrások és kifejezésfák használata alapján.System.Linq.IQueryProviderSystem.Linq.IQueryable<T> A kifejezésfák korlátozottan használhatják az engedélyezett C# szintaxist. Emellett minden adatforrás IQueryProvider , például az EF Core további korlátozásokat is alkalmazhat. Ellenőrizze az adatforrás dokumentációját.

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ó
RendezésAlapján Növekvő sorrendbe rendezi az értékeket. orderby Enumerable.OrderBy

Queryable.OrderBy
CsökkenőSorrendbeRendezés 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
MajdCsökkenőSorrendben 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

Feljegyzés

A cikkben szereplő alábbi példák a terület közös adatforrásait használják.
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ő.
A mintaadatkészlet a forrásadattárban található.

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

Feljegyzés

A terület gyakori adatforrásai a Standard lekérdezési operátorok áttekintése című cikkben találhatóak.

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