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.
Viktigt!
Dessa exempel använder en System.Collections.Generic.IEnumerable<T> datakälla. Datakällor baserade på System.Linq.IQueryProvider användning av System.Linq.IQueryable<T> datakällor och uttrycksträd. Uttrycksträd har begränsningar för den tillåtna C#-syntaxen. Dessutom kan varje IQueryProvider
datakälla, till exempel EF Core , införa fler begränsningar. Kontrollera dokumentationen för din datakälla.
Följande bild visar resultatet av en alfabetisk sorteringsåtgärd på en sekvens med tecken:
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 |
Kommentar
I följande exempel i den här artikeln används vanliga datakällor för det här området.
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.
Du hittar exempeldatauppsättningen i källdatabasen.
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; }
}
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}");
}