Verileri Sıralama (C#)
Sıralama işlemi, bir dizinin öğelerini bir veya daha fazla öznitelik temelinde sıralar. İlk sıralama ölçütü, öğeler üzerinde birincil sıralama gerçekleştirir. İkinci bir sıralama ölçütü belirterek, her birincil sıralama grubundaki öğeleri sıralayabilirsiniz.
Önemli
Bu örnekler bir System.Collections.Generic.IEnumerable<T> veri kaynağı kullanır. Veri kaynaklarını ve ifade ağaçlarını System.Linq.IQueryProviderkullanan System.Linq.IQueryable<T> veri kaynakları. İfade ağaçlarının izin verilen C# söz diziminde sınırlamaları vardır. Ayrıca EF Core gibi her IQueryProvider
veri kaynağı daha fazla kısıtlama uygulayabilir. Veri kaynağınızın belgelerine bakın.
Aşağıdaki çizimde, bir karakter dizisinde alfabetik sıralama işleminin sonuçları gösterilmektedir:
Verileri sıralayan standart sorgu işleci yöntemleri aşağıdaki bölümde listelenmiştir.
Yöntemler
Yöntem Adı | Açıklama | C# Sorgu İfadesi Söz Dizimi | Daha Fazla Bilgi |
---|---|---|---|
OrderBy | Değerleri artan düzende sıralar. | orderby |
Enumerable.OrderBy Queryable.OrderBy |
OrderByDescending | Değerleri azalan düzende sıralar. | orderby … descending |
Enumerable.OrderByDescending Queryable.OrderByDescending |
SonraDan | İkincil sıralamayı artan düzende gerçekleştirir. | orderby …, … |
Enumerable.ThenBy Queryable.ThenBy |
ThenByDescending | İkincil sıralamayı azalan düzende gerçekleştirir. | orderby …, … descending |
Enumerable.ThenByDescending Queryable.ThenByDescending |
Ters kaydet | Koleksiyondaki öğelerin sırasını tersine çevirir. | Uygulanamaz. | Enumerable.Reverse Queryable.Reverse |
Not
Bu makaledeki aşağıdaki örneklerde bu alan için ortak veri kaynakları kullanılır.
Her Student
birinin bir not düzeyi, bir birincil bölüm ve bir dizi puanı vardır. Ayrıca, Teacher
öğretmenin ders aldığı kampüsü tanımlayan bir City
özelliği de vardır. A'nın Department
bir adı ve bölüm başkanı olarak görev yapan bir Teacher
kişi için bir referansı vardır.
Örnek veri kümesini kaynak depoda bulabilirsiniz.
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; }
}
Birincil Artan Sıralama
Aşağıdaki örnekte, öğretmen dizisini orderby
aile adına göre artan düzende sıralamak için LINQ sorgusunda yan tümcesinin nasıl kullanılacağı gösterilmektedir.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
Yöntem söz dizimi kullanılarak yazılan eşdeğer sorgu aşağıdaki kodda gösterilir:
IEnumerable<string> query = teachers
.OrderBy(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
Birincil Azalan Sıralama
Sonraki örnekte, öğretmenleri aile adına göre azalan düzende sıralamak için LINQ sorgusundaki yan tümcesinin nasıl kullanılacağı orderby descending
gösterilmektedir.
IEnumerable<string> query = from teacher in teachers
orderby teacher.Last descending
select teacher.Last;
foreach (string str in query)
{
Console.WriteLine(str);
}
Yöntem söz dizimi kullanılarak yazılan eşdeğer sorgu aşağıdaki kodda gösterilir:
IEnumerable<string> query = teachers
.OrderByDescending(teacher => teacher.Last)
.Select(teacher => teacher.Last);
foreach (string str in query)
{
Console.WriteLine(str);
}
İkincil Artan Sıralama
Aşağıdaki örnekte, birincil ve ikincil sıralama gerçekleştirmek için LINQ sorgusunda yan tümcesinin orderby
nasıl kullanılacağı gösterilmektedir. Öğretmenler, her ikisi de artan düzende öncelikle şehre ve ikincil olarak aile adlarına göre sıralanır.
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}");
}
Yöntem söz dizimi kullanılarak yazılan eşdeğer sorgu aşağıdaki kodda gösterilir:
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}");
}
İkincil Azalan Sıralama
Sonraki örnekte, linq sorgusundaki yan tümcesinin orderby descending
artan düzende ve ikincil sıralamayı azalan düzende gerçekleştirmek için nasıl kullanılacağı gösterilmektedir. Öğretmenler öncelikle şehre ve ikincil olarak aile adlarına göre sıralanır.
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}");
}
Yöntem söz dizimi kullanılarak yazılan eşdeğer sorgu aşağıdaki kodda gösterilir:
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}");
}