Řazení dat (C#)

Operace řazení objedná prvky sekvence na základě jednoho nebo více atributů. Prvním kritériem řazení je primární řazení prvků. Zadáním druhého kritéria řazení můžete řadit prvky v rámci každé primární skupiny řazení.

Následující obrázek znázorňuje výsledky abecední operace řazení v posloupnosti znaků:

Obrázek znázorňující abecední operaci řazení

Standardní metody operátoru dotazu, které seřadí data, jsou uvedeny v následující části.

Metody

Název metody Popis Syntaxe výrazu dotazu jazyka C# Další informace
OrderBy Seřadí hodnoty ve vzestupném pořadí. orderby Enumerable.OrderBy

Queryable.OrderBy
Orderbydescending Seřadí hodnoty v sestupném pořadí. orderby … descending Enumerable.OrderByDescending

Queryable.OrderByDescending
Thenby Provede sekundární řazení ve vzestupném pořadí. orderby …, … Enumerable.ThenBy

Queryable.ThenBy
Thenbydescending Provede sekundární řazení v sestupném pořadí. orderby …, … descending Enumerable.ThenByDescending

Queryable.ThenByDescending
Stornovat Vrátí pořadí prvků v kolekci. Nevztahuje se. Enumerable.Reverse

Queryable.Reverse

Následující příklady v tomto článku používají běžné zdroje dat pro tuto oblast:

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

Každý z nich Student má úroveň známek, primární oddělení a řadu výsledků. A TeacherCity také vlastnost, která identifikuje areál, kde učitel má předměty. A Department má jméno a odkaz na Teacher toho, kdo slouží jako vedoucí oddělení.

Primární vzestupné řazení

Následující příklad ukazuje použití orderby klauzule v dotazu LINQ k seřazení pole učitelů podle jména rodiny ve vzestupném pořadí.

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

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

Ekvivalentní dotaz napsaný pomocí syntaxe metody je uvedený v následujícím kódu:

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

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

Primární sestupné řazení

Další příklad ukazuje, jak pomocí orderby descending klauzule v dotazu LINQ seřadit učitele podle rodinného jména v sestupném pořadí.

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

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

Ekvivalentní dotaz napsaný pomocí syntaxe metody je uvedený v následujícím kódu:

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

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

Sekundární vzestupné řazení

Následující příklad ukazuje použití orderby klauzule v dotazu LINQ k provedení primárního a sekundárního řazení. Učitelé jsou seřazeni primárně podle města a za druhé podle svého rodinného jména, a to jak ve vzestupném pořadí.

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

Ekvivalentní dotaz napsaný pomocí syntaxe metody je uvedený v následujícím kódu:

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ární sestupné řazení

Další příklad ukazuje použití orderby descending klauzule v dotazu LINQ k provedení primárního řazení, vzestupně a sekundárního řazení v sestupném pořadí. Učitelé jsou seřazeni především podle města a za druhé podle svého rodinného jména.

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

Ekvivalentní dotaz napsaný pomocí syntaxe metody je uvedený v následujícím kódu:

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

Viz také