Ř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ů:
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 Teacher
má City
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é
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro