Mengurutkan Data (C#)
Operasi pengurutan mengurutkan elemen urutan berdasarkan satu atau beberapa atribut. Kriteria pengurutan pertama melakukan pengurutan utama pada elemen. Dengan menentukan kriteria pengurutan kedua, Anda dapat mengurutkan elemen dalam setiap grup pengurutan utama.
Penting
Sampel ini menggunakan System.Collections.Generic.IEnumerable<T> sumber data. Sumber data berdasarkan System.Linq.IQueryProvider penggunaan System.Linq.IQueryable<T> sumber data dan pohon ekspresi. Pohon ekspresi memiliki batasan pada sintaks C# yang diizinkan. Selain itu, setiap IQueryProvider
sumber data, seperti EF Core dapat memberlakukan lebih banyak batasan. Periksa dokumentasi untuk sumber data Anda.
Ilustrasi berikut menunjukkan hasil operasi pengurutan abjad pada urutan karakter:
Metode operator kueri standar yang mengurutkan data dicantumkan di bagian berikut.
Metode
Nama Metode | Deskripsi | Sintaksis Ekspresi Kueri C# | Informasi Selengkapnya |
---|---|---|---|
OrderBy | Mengurutkan nilai dalam urutan naik. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | Mengurutkan nilai dalam urutan menurun. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
ThenBy | Melakukan pengurutan sekunder dalam urutan naik. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
ThenByDescending | Melakukan pengurutan sekunder dalam urutan menurun. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Balik | Membalikkan urutan elemen dalam kumpulan. | Tidak berlaku. | Enumerable.Reverse Queryable.Reverse |
Contoh berikut dalam artikel ini menggunakan sumber data umum untuk area ini:
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; }
}
Masing-masing Student
memiliki tingkat kelas, departemen utama, dan serangkaian skor. A Teacher
juga memiliki City
properti yang mengidentifikasi kampus tempat guru mengadakan kelas. A Department
memiliki nama, dan referensi untuk siapa Teacher
yang menjabat sebagai kepala departemen.
Pengurutan Naik Utama
Contoh berikut menunjukkan cara menggunakan orderby
klausa dalam kueri LINQ untuk mengurutkan array guru menurut nama keluarga, dalam urutan naik.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
Kueri setara yang ditulis menggunakan sintaks metode diperlihatkan dalam kode berikut:
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Pengurutan Menurun Utama
Contoh berikutnya menunjukkan cara menggunakan orderby descending
klausul dalam kueri LINQ untuk mengurutkan guru menurut nama keluarga, dalam urutan menurut.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last descending
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
Kueri setara yang ditulis menggunakan sintaks metode diperlihatkan dalam kode berikut:
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Pengurutan Naik Sekunder
Contoh berikut menunjukkan cara menggunakan orderby
klausa dalam kueri LINQ untuk melakukan pengurutan primer dan sekunder. Para guru diurutkan terutama berdasarkan kota dan sekunder berdasarkan nama keluarga mereka, keduanya dalam urutan naik.
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}");
}
Kueri setara yang ditulis menggunakan sintaks metode diperlihatkan dalam kode berikut:
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}");
}
Pengurutan Menurun Sekunder
Contoh berikutnya menunjukkan cara menggunakan klausul orderby descending
dalam kueri LINQ untuk melakukan pengurutan primer, dalam urutan naik, dan pengurutan sekunder, dalam urutan menurun. Guru diurutkan terutama berdasarkan kota dan sekunder berdasarkan nama keluarga mereka.
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}");
}
Kueri setara yang ditulis menggunakan sintaks metode diperlihatkan dalam kode berikut:
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}");
}