Bu makalede kullanılan
veri kaynağını görmek için tıklayın.
OrderBy İle Basit Sıralama Örneği 1
OrderBy yöntemi ve
orderby cümleciği, listeleri sıralamak için kullanılır.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri numaralarına göre sıralayıp oluşturduğu yeni
listeyi foreach döngüsü ile çıktıya yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
- orderby Ogrenci.No
- select Ogrenci;
-
- Console.WriteLine("Numaraya göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- 1 - Nuri Babayiğit
- 2 - Tuncay Çağrı
- 3 - Hale Birinci
- 4 - Jale İkinci
- 5 - Kenan Oran
- 6 - Ahmet Geçe
- 7 - Tekin Uğurlu
- 8 - Mesut Bahtiyar
- 9 - Lale Üçüncü
- 10 - Erhan Erkanlı
- 11 - Cevdet Döğer
- 12 - Veli Canlı
- 13 - Ayşe Hanım
- 14 - Mehmet Emre
- 15 - Fatma Teyze
- 16 - Erhan Fidan
- 17 - Erhan Çelik
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.No);
-
- Console.WriteLine("Numaraya göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
OrderBy İle Basit Sıralama Örneği 2
OrderBy yöntemi ve
orderby cümleciği, listeleri sıralamak için kullanılır.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri soyadlarındaki harf
sayısına göre sıralayıp oluşturduğu yeni listeyi foreach döngüsü ile çıktıya yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
- orderby Ogrenci.Soyadi.Length
- select Ogrenci;
-
- Console.WriteLine("Soyadının harf sayısına göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- Soyadının harf sayısına göre sıralı öğrenci listesi :
- 6 - Ahmet Geçe
- 14 - Mehmet Emre
- 5 - Kenan Oran
- 2 - Tuncay Çağrı
- 12 - Veli Canlı
- 15 - Fatma Teyze
- 13 - Ayşe Hanım
- 11 - Cevdet Döğer
- 16 - Erhan Fidan
- 17 - Erhan Çelik
- 4 - Jale İkinci
- 7 - Tekin Uğurlu
- 9 - Lale Üçüncü
- 3 - Hale Birinci
- 10 - Erhan Erkanlı
- 8 - Mesut Bahtiyar
- 1 - Nuri Babayiğit
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Soyadi.Length);
-
- Console.WriteLine("Soyadının harf sayısına göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
OrderBy İle Basit Sıralama Örneği 3
OrderBy yöntemi ve
orderby cümleciği, listeleri sıralamak için kullanılır.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri adlarına göre
sıralayıp oluşturduğu yeni listeyi foreach döngüsü ile çıktıya yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
- orderby Ogrenci.Adi
- select Ogrenci;
-
- Console.WriteLine("Adına göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- Adına göre sıralı öğrenci listesi :
- 6 - Ahmet Geçe
- 13 - Ayşe Hanım
- 11 - Cevdet Döğer
- 10 - Erhan Erkanlı
- 16 - Erhan Fidan
- 17 - Erhan Çelik
- 15 - Fatma Teyze
- 3 - Hale Birinci
- 4 - Jale İkinci
- 5 - Kenan Oran
- 9 - Lale Üçüncü
- 14 - Mehmet Emre
- 8 - Mesut Bahtiyar
- 1 - Nuri Babayiğit
- 7 - Tekin Uğurlu
- 2 - Tuncay Çağrı
- 12 - Veli Canlı
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Adi);
-
- Console.WriteLine("Adına göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
OrderBy ve Karşılaştırıcı (Comparer) Kullanarak Sıralama Örneği
OrderBy yöntemi listeleri sıralamak için kullanılır.
OrderBy ile beraber özel durumlara göre sıralama
yapılmak isteniyorsa ayrıca
IComparer arayüzünü uygulayan bir karşılaştırıcı (Comparer) sınıf kullanılabilir.
Bu durumda
OrderBy sıralama için liste elemanlarını karşılaştırırken, belirtilen sınıfın
Compare (karşılaştır) yöntemini çağırır. Dolayısıyla sıralama, bizim sıralama sınıfının Compare yönteminde
döndürdüğümüz değere göre yapılır.
OrderBy yönteminin bu kullanımda yönteme birinci parametre olarak sıralamada kullanılacak öğeyi (örnekte
Kayit sınıfı ile temsil edilen öğrenci bilgisi), ikinci parametre olarak karşılaştırma sınıfının bir örneğini
göndeririz.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri bayanlar önce olmak üzere adlarına göre
sıralayıp yeni listeyi foreach döngüsü ile çıktıya yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi =
- Ogrenciler.OrderBy(Ogrenci => Ogrenci, new BayanlarOndenKarsilastirici());
-
- Console.WriteLine("Adına göre sıralı öğrenci listesi (Önce bayanlar) :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
Örnekte kullanılan karşılaştırma sınıfı (Comparer) şöyledir :
- public class BayanlarOndenKarsilastirici : IComparer
- {
- public int Compare(Kayit x, Kayit y)
- {
- if (x.Cinsiyet != y.Cinsiyet)
- return String.Compare(x.Cinsiyet, y.Cinsiyet);
-
- return string.Compare(x.Adi, y.Adi);
- }
- }
Örneğin çıktısı şöyle olacaktır :
- Adına göre sıralı öğrenci listesi (Önce bayanlar) :
- 13 - Ayşe Hanım
- 15 - Fatma Teyze
- 3 - Hale Birinci
- 4 - Jale İkinci
- 9 - Lale Üçüncü
- 6 - Ahmet Geçe
- 11 - Cevdet Döğer
- 10 - Erhan Erkanlı
- 16 - Erhan Fidan
- 17 - Erhan Çelik
- 5 - Kenan Oran
- 14 - Mehmet Emre
- 8 - Mesut Bahtiyar
- 1 - Nuri Babayiğit
- 7 - Tekin Uğurlu
- 2 - Tuncay Çağrı
- 12 - Veli Canlı
OrderByDescending İle Basit Azalan Sıralama Örneği 1
OrderByDescending yöntemi ve "
orderby ...
descending" cümleciği,
listeleri ters (azalan şekilde, büyükten küçüğe) sıralamak için
kullanılır.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri soyadlarına sıralayıp oluşturduğu yeni
listedeki numara, ad ve soyadları foreach döngüsü ile çıktıya yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
- orderby Ogrenci.Soyadi descending
- select Ogrenci;
-
- Console.WriteLine("Soyadina göre ters sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- Soyadina göre ters sıralı öğrenci listesi :
- 9 - Lale Üçüncü
- 7 - Tekin Uğurlu
- 15 - Fatma Teyze
- 5 - Kenan Oran
- 4 - Jale İkinci
- 13 - Ayşe Hanım
- 6 - Ahmet Geçe
- 16 - Erhan Fidan
- 10 - Erhan Erkanlı
- 14 - Mehmet Emre
- 11 - Cevdet Döğer
- 17 - Erhan Çelik
- 2 - Tuncay Çağrı
- 12 - Veli Canlı
- 3 - Hale Birinci
- 8 - Mesut Bahtiyar
- 1 - Nuri Babayiğit
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = Ogrenciler.OrderByDescending(Ogrenci => Ogrenci.Soyadi);
-
- Console.WriteLine("Soyadina göre ters sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
OrderByDescending İle Basit Azalan Sıralama Örneği 2
OrderByDescending yöntemi ve "
orderby ...
descending" cümleciği,
listeleri ters (azalan şekilde, büyükten küçüğe) sıralamak için
kullanılır.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri soyadlarındaki harf sayısına göre
azalan sırada sıralayıp oluşturduğu yeni listedeki numara, ad ve soyadları foreach döngüsü ile çıktıya yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
- orderby Ogrenci.Soyadi.Length descending
- select Ogrenci;
-
- Console.WriteLine("Soyadi uzunluğuna göre ters sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- Soyadi uzunluğuna göre ters sıralı öğrenci listesi :
- 1 - Nuri Babayiğit
- 8 - Mesut Bahtiyar
- 3 - Hale Birinci
- 10 - Erhan Erkanlı
- 4 - Jale İkinci
- 7 - Tekin Uğurlu
- 9 - Lale Üçüncü
- 2 - Tuncay Çağrı
- 12 - Veli Canlı
- 15 - Fatma Teyze
- 13 - Ayşe Hanım
- 11 - Cevdet Döğer
- 16 - Erhan Fidan
- 17 - Erhan Çelik
- 6 - Ahmet Geçe
- 14 - Mehmet Emre
- 5 - Kenan Oran
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = Ogrenciler.OrderByDescending(Ogrenci => Ogrenci.Soyadi.Length);
-
- Console.WriteLine("Soyadi uzunluğuna göre ters sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
ThenBy İle İkincil Sıralama Ölçütü Kullanma Örneği
ThenBy yöntemi veya
orderby cümleciğinde aralarına virgül koyarak
birden fazla alan bildirilip sıralamanın bu alanların hepsi gözönüne
alınarak yapılması sağlanabilir. Örneğin bir liste birincil olarak
adına, ikincil olarak soyadına göre sıralandığında aynı ada sahip
elemanlar kendi aralarında soyadına göre sıralanırlar (telefon rehberi
gibi).
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri
hem ad, hem de soyadlarına göre sıralayıp oluşturduğu yeni listedeki
numara, ad ve soyadları foreach döngüsü ile çıktıya yazar. Örnekteki
çıktısındaki adı
"Erhan" olan satırlara dikkat edin.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
- orderby Ogrenci.Adi, Ogrenci.Soyadi
- select Ogrenci;
-
- Console.WriteLine("Adı ve soyadına göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- Adı ve soyadına göre sıralı öğrenci listesi :
- 6 - Ahmet Geçe
- 13 - Ayşe Hanım
- 11 - Cevdet Döğer
- 17 - Erhan Çelik
- 10 - Erhan Erkanlı
- 16 - Erhan Fidan
- 15 - Fatma Teyze
- 3 - Hale Birinci
- 4 - Jale İkinci
- 5 - Kenan Oran
- 9 - Lale Üçüncü
- 14 - Mehmet Emre
- 8 - Mesut Bahtiyar
- 1 - Nuri Babayiğit
- 7 - Tekin Uğurlu
- 2 - Tuncay Çağrı
- 12 - Veli Canlı
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Adi).ThenBy(Ogrenci => Ogrenci.Soyadi);
-
- Console.WriteLine("Adı ve soyadına göre sıralı öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciListesi)
- {
- Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
- }
- Console.ReadLine();
ThenBy İle Karşılaştırıcı Kullanarak İkincil Sıralama Ölçütü Örneği
ThenBy yöntemi listeleri ikincil bir ölüte göre sıralamak için kullanılır.
ThenBy ile beraber özel durumlara göre
sıralama yapılmak isteniyorsa ayrıca
IComparer arayüzünü uygulayan bir karşılaştırıcı (Comparer) sınıf kullanılabilir.
Bu durumda
ThenBy sıralama için liste elemanlarını karşılaştırırken, belirtilen sınıfın
Compare (karşılaştır) yöntemini çağırır. Dolayısıyla sıralama, bizim sıralama sınıfının Compare yönteminde
döndürdüğümüz değere göre yapılır.
ThenBy yönteminin bu kullanımda yönteme birinci parametre olarak sıralamada kullanılacak öğeyi (örnekte
Kayit sınıfı ile temsil edilen öğrenci bilgisi), ikinci parametre olarak karşılaştırma sınıfının bir örneğini
göndeririz.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri
not ortalamalarına göre aynı ortalamaya sahip kayıtlarda bayanları öne
alarak sıralayıp oluşturduğu yeni listeyi foreach döngüsü ile çıktıya
yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciler = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Ortalama).ThenBy(Ogrenci => Ogrenci, new BayanlarOndenKarsilastirici());
-
- Console.WriteLine("Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce bayan) :");
-
- foreach (var Ogrenci in SiraliOgrenciler)
- {
- Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
- }
- Console.ReadLine();
Örnekte kullanılan karşılaştırma sınıfı (Comparer) şöyledir :
- public class BayanlarOndenKarsilastirici : IComparer
- {
- public int Compare(Kayit x, Kayit y)
- {
- if (x.Cinsiyet != y.Cinsiyet)
- return String.Compare(x.Cinsiyet, y.Cinsiyet);
-
- return string.Compare(x.Adi, y.Adi);
- }
- }
Örneğin çıktısı şöyle olacaktır :
- Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce bayan) :
- Cevdet Döğer, ortalaması 16,25
- Lale Üçüncü, ortalaması 16,67
- Hale Birinci, ortalaması 25,00
- Tekin Uğurlu, ortalaması 30,00
- Mesut Bahtiyar, ortalaması 36,67
- Veli Canlı, ortalaması 43,33
- Nuri Babayiğit, ortalaması 65,00
- Mehmet Emre, ortalaması 66,33
- Kenan Oran, ortalaması 66,67
- Tuncay Çağrı, ortalaması 73,33
- Ahmet Geçe, ortalaması 76,67
- Erhan Çelik, ortalaması 78,33
- Ayşe Hanım, ortalaması 80,00
- Erhan Fidan, ortalaması 86,25
- Fatma Teyze, ortalaması 89,25
- Erhan Erkanlı, ortalaması 90,00
- Jale İkinci, ortalaması 97,00
ThenByDescending İle İkincil Sıralama Ölçütü Kullanma Örneği
ThenByDescending yöntemi veya orderby ... descending cümleciğinde
aralarına virgül koyarak birden fazla alan bildirilip sıralamanın bu
alanların hepsi gözönüne alınarak ters sıralama (büyükten küçüğe)
yapılması sağlanabilir. Örneğin bir liste birincil olarak adına, ikincil
olarak soyadına göre sıralandığında aynı ada sahip elemanlar kendi
aralarında soyadına göre sıralanırlar (telefon rehberi gibi).
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri
sınıflarına göre artan ve aynı zamanda ortalamalırına göre azalan (her
sınıf ayrı ayrı ortalamalarına göre azalan sırada) şekilde sıralayıp
oluşturduğu yeni listedeki ad, soyad, sınıf ve ortalama bilgilerini
foreach döngüsü ile çıktıya yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciler =
- from Ogrenci in Ogrenciler
- orderby Ogrenci.Sinif, Ogrenci.Ortalama descending
- select Ogrenci;
-
- Console.WriteLine("Sınıflarına göre artan ve ortalamalarına göre azalan sırada öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciler)
- {
- Console.WriteLine("{0} {1}, sınıfı {2}, ortalaması {3:0.00}.",
- Ogrenci.Adi,
- Ogrenci.Soyadi,
- Ogrenci.Sinif,
- Ogrenci.Ortalama);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- Sınıflarına göre artan ve ortalamalarına göre azalan sırada öğrenci listesi :
- Erhan Erkanlı, sınıfı 1, ortalaması 90,00.
- Kenan Oran, sınıfı 1, ortalaması 66,67.
- Tekin Uğurlu, sınıfı 1, ortalaması 30,00.
- Erhan Fidan, sınıfı 2, ortalaması 86,25.
- Ayşe Hanım, sınıfı 2, ortalaması 80,00.
- Ahmet Geçe, sınıfı 2, ortalaması 76,67.
- Nuri Babayiğit, sınıfı 2, ortalaması 65,00.
- Hale Birinci, sınıfı 2, ortalaması 25,00.
- Jale İkinci, sınıfı 3, ortalaması 97,00.
- Fatma Teyze, sınıfı 3, ortalaması 89,25.
- Erhan Çelik, sınıfı 3, ortalaması 78,33.
- Lale Üçüncü, sınıfı 3, ortalaması 16,67.
- Cevdet Döğer, sınıfı 3, ortalaması 16,25.
- Tuncay Çağrı, sınıfı 4, ortalaması 73,33.
- Mehmet Emre, sınıfı 4, ortalaması 66,33.
- Veli Canlı, sınıfı 4, ortalaması 43,33.
- Mesut Bahtiyar, sınıfı 4, ortalaması 36,67.
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciler = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Sinif)
- .ThenByDescending(Ogrenci => Ogrenci.Ortalama);
-
- Console.WriteLine("Sınıflarına göre artan ve ortalamalarına göre azalan sırada öğrenci listesi :");
-
- foreach (var Ogrenci in SiraliOgrenciler)
- {
- Console.WriteLine("{0} {1}, sınıfı {2}, ortalaması {3:0.00}.",
- Ogrenci.Adi,
- Ogrenci.Soyadi,
- Ogrenci.Sinif,
- Ogrenci.Ortalama);
- }
- Console.ReadLine();
ThenByDescending İle Karşılaştırıcı Kullanarak İkincil Sıralama Ölçütü Kullanma Örneği
ThenByDescending yöntemi listeleri ikincil bir ölçüte göre azalan sırada sıralamak için kullanılır.
ThenByDescending ile beraber özel durumlara göre sıralama yapılmak isteniyorsa ayrıca IComparer arayüzünü uygulayan
bir karşılaştırıcı (Comparer) sınıf kullanılabilir. Bu durumda
ThenByDescending, sıralama için liste elemanlarını
karşılaştırırken, belirtilen sınıfın Compare (karşılaştır) yöntemini çağırır ve sıralamayı bizim sıralama
sınıfının Compare yönteminde döndürdüğümüz değere göre yapar.
ThenByDescending yönteminin bu kullanımda yönteme birinci parametre olarak sıralamada kullanılacak öğeyi (örnekte
Kayit sınıfı ile temsil edilen öğrenci bilgisi), ikinci parametre olarak karşılaştırma sınıfının bir örneğini
göndeririz.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri
not ortalamalarına göre aynı ortalamaya sahip kayıtlarda erkekleri öne
alarak sıralayıp oluşturduğu yeni listeyi foreach döngüsü ile çıktıya
yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var SiraliOgrenciler = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Ortalama)
- .ThenByDescending(Ogrenci => Ogrenci, new BayanlarOndenKarsilastirici());
-
- Console.WriteLine("Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce erkek) :");
-
- foreach (var Ogrenci in SiraliOgrenciler)
- {
- Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
- }
- Console.ReadLine();
Örnekte kullanılan karşılaştırma sınıfı (Comparer) şöyledir :
- public class BayanlarOndenKarsilastirici : IComparer
- {
- public int Compare(Kayit x, Kayit y)
- {
- if (x.Cinsiyet != y.Cinsiyet)
- return String.Compare(x.Cinsiyet, y.Cinsiyet);
-
- return string.Compare(x.Adi, y.Adi);
- }
- }
Örneğin çıktısı şöyle olacaktır :
- Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce erkek) :
- Cevdet Döğer, ortalaması 16,25
- Lale Üçüncü, ortalaması 16,67
- Hale Birinci, ortalaması 25,00
- Tekin Uğurlu, ortalaması 30,00
- Mesut Bahtiyar, ortalaması 36,67
- Veli Canlı, ortalaması 43,33
- Nuri Babayiğit, ortalaması 65,00
- Mehmet Emre, ortalaması 66,33
- Kenan Oran, ortalaması 66,67
- Tuncay Çağrı, ortalaması 73,33
- Ahmet Geçe, ortalaması 76,67
- Erhan Çelik, ortalaması 78,33
- Ayşe Hanım, ortalaması 80,00
- Erhan Fidan, ortalaması 86,25
- Fatma Teyze, ortalaması 89,25
- Erhan Erkanlı, ortalaması 90,00
- Jale İkinci, ortalaması 97,00
Reverse İle Ters Çevirme Örneği
Reverse (
Enumerable.Reverse) listeleri tersine çevirip yeni bir liste oluşturur.
Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki erkek
öğrencileri seçip oluşturduğu yeni listeyi ters çevirerek yeni listedeki
ad, soyad, sınıf ve ortalama bilgilerini foreach döngüsü ile çıktıya
yazar.
- var Ogrenciler = OgrencileriGetir();
-
- var TersListe = (from Ogrenci in Ogrenciler
- where Ogrenci.Cinsiyet == "Erkek"
- select Ogrenci).Reverse();
-
- Console.WriteLine("Ters çevrilmiş liste (Sadece erkekler) :");
-
- foreach (var Ogrenci in TersListe)
- {
- Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
- }
- Console.ReadLine();
Örneğin çıktısı şöyle olacaktır :
- Ters çevrilmiş liste (Sadece erkekler) :
- Erhan Çelik, ortalaması 78,33
- Erhan Fidan, ortalaması 86,25
- Erhan Erkanlı, ortalaması 90,00
- Kenan Oran, ortalaması 66,67
- Nuri Babayiğit, ortalaması 65,00
- Cevdet Döğer, ortalaması 16,25
- Mehmet Emre, ortalaması 66,33
- Ahmet Geçe, ortalaması 76,67
- Veli Canlı, ortalaması 43,33
- Mesut Bahtiyar, ortalaması 36,67
- Tekin Uğurlu, ortalaması 30,00
- Tuncay Çağrı, ortalaması 73,33
Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:
- var Ogrenciler = OgrencileriGetir();
-
- var TersListe = Ogrenciler.Where(Ogrenci => Ogrenci.Cinsiyet == "Erkek").Reverse();
-
- Console.WriteLine("Ters çevrilmiş liste (Sadece erkekler) :");
-
- foreach (var Ogrenci in TersListe)
- {
- Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
- }
Kaynak:
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b