Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Bu siteyi Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.

0



LINQ - Sıralama (Ordering) Örnekleri

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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
  4. orderby Ogrenci.No
  5. select Ogrenci;
  6.  
  7. Console.WriteLine("Numaraya göre sıralı öğrenci listesi :");
  8.  
  9. foreach (var Ogrenci in SiraliOgrenciListesi)
  10. {
  11. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  12. }
  13. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. 1 - Nuri Babayiğit
  2. 2 - Tuncay Çağrı
  3. 3 - Hale Birinci
  4. 4 - Jale İkinci
  5. 5 - Kenan Oran
  6. 6 - Ahmet Geçe
  7. 7 - Tekin Uğurlu
  8. 8 - Mesut Bahtiyar
  9. 9 - Lale Üçüncü
  10. 10 - Erhan Erkanlı
  11. 11 - Cevdet Döğer
  12. 12 - Veli Canlı
  13. 13 - Ayşe Hanım
  14. 14 - Mehmet Emre
  15. 15 - Fatma Teyze
  16. 16 - Erhan Fidan
  17. 17 - Erhan Çelik

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.No);
  4.  
  5. Console.WriteLine("Numaraya göre sıralı öğrenci listesi :");
  6.  
  7. foreach (var Ogrenci in SiraliOgrenciListesi)
  8. {
  9. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  10. }
  11. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
  4. orderby Ogrenci.Soyadi.Length
  5. select Ogrenci;
  6.  
  7. Console.WriteLine("Soyadının harf sayısına göre sıralı öğrenci listesi :");
  8.  
  9. foreach (var Ogrenci in SiraliOgrenciListesi)
  10. {
  11. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  12. }
  13. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. Soyadının harf sayısına göre sıralı öğrenci listesi :
  2. 6 - Ahmet Geçe
  3. 14 - Mehmet Emre
  4. 5 - Kenan Oran
  5. 2 - Tuncay Çağrı
  6. 12 - Veli Canlı
  7. 15 - Fatma Teyze
  8. 13 - Ayşe Hanım
  9. 11 - Cevdet Döğer
  10. 16 - Erhan Fidan
  11. 17 - Erhan Çelik
  12. 4 - Jale İkinci
  13. 7 - Tekin Uğurlu
  14. 9 - Lale Üçüncü
  15. 3 - Hale Birinci
  16. 10 - Erhan Erkanlı
  17. 8 - Mesut Bahtiyar
  18. 1 - Nuri Babayiğit

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Soyadi.Length);
  4.  
  5. Console.WriteLine("Soyadının harf sayısına göre sıralı öğrenci listesi :");
  6.  
  7. foreach (var Ogrenci in SiraliOgrenciListesi)
  8. {
  9. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  10. }
  11. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
  4. orderby Ogrenci.Adi
  5. select Ogrenci;
  6.  
  7. Console.WriteLine("Adına göre sıralı öğrenci listesi :");
  8.  
  9. foreach (var Ogrenci in SiraliOgrenciListesi)
  10. {
  11. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  12. }
  13. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. Adına göre sıralı öğrenci listesi :
  2. 6 - Ahmet Geçe
  3. 13 - Ayşe Hanım
  4. 11 - Cevdet Döğer
  5. 10 - Erhan Erkanlı
  6. 16 - Erhan Fidan
  7. 17 - Erhan Çelik
  8. 15 - Fatma Teyze
  9. 3 - Hale Birinci
  10. 4 - Jale İkinci
  11. 5 - Kenan Oran
  12. 9 - Lale Üçüncü
  13. 14 - Mehmet Emre
  14. 8 - Mesut Bahtiyar
  15. 1 - Nuri Babayiğit
  16. 7 - Tekin Uğurlu
  17. 2 - Tuncay Çağrı
  18. 12 - Veli Canlı

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Adi);
  4.  
  5. Console.WriteLine("Adına göre sıralı öğrenci listesi :");
  6.  
  7. foreach (var Ogrenci in SiraliOgrenciListesi)
  8. {
  9. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  10. }

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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi =
  4. Ogrenciler.OrderBy(Ogrenci => Ogrenci, new BayanlarOndenKarsilastirici());
  5.  
  6. Console.WriteLine("Adına göre sıralı öğrenci listesi (Önce bayanlar) :");
  7.  
  8. foreach (var Ogrenci in SiraliOgrenciListesi)
  9. {
  10. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  11. }
  12. Console.ReadLine();

Örnekte kullanılan karşılaştırma sınıfı (Comparer) şöyledir :

  1. public class BayanlarOndenKarsilastirici : IComparer
  2. {
  3. public int Compare(Kayit x, Kayit y)
  4. {
  5. if (x.Cinsiyet != y.Cinsiyet)
  6. return String.Compare(x.Cinsiyet, y.Cinsiyet);
  7.  
  8. return string.Compare(x.Adi, y.Adi);
  9. }
  10. }

Örneğin çıktısı şöyle olacaktır :

  1. Adına göre sıralı öğrenci listesi nce bayanlar) :
  2. 13 - Ayşe Hanım
  3. 15 - Fatma Teyze
  4. 3 - Hale Birinci
  5. 4 - Jale İkinci
  6. 9 - Lale Üçüncü
  7. 6 - Ahmet Geçe
  8. 11 - Cevdet Döğer
  9. 10 - Erhan Erkanlı
  10. 16 - Erhan Fidan
  11. 17 - Erhan Çelik
  12. 5 - Kenan Oran
  13. 14 - Mehmet Emre
  14. 8 - Mesut Bahtiyar
  15. 1 - Nuri Babayiğit
  16. 7 - Tekin Uğurlu
  17. 2 - Tuncay Çağrı
  18. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
  4. orderby Ogrenci.Soyadi descending
  5. select Ogrenci;
  6.  
  7. Console.WriteLine("Soyadina göre ters sıralı öğrenci listesi :");
  8.  
  9. foreach (var Ogrenci in SiraliOgrenciListesi)
  10. {
  11. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  12. }
  13. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. Soyadina göre ters sıralı öğrenci listesi :
  2. 9 - Lale Üçüncü
  3. 7 - Tekin Uğurlu
  4. 15 - Fatma Teyze
  5. 5 - Kenan Oran
  6. 4 - Jale İkinci
  7. 13 - Ayşe Hanım
  8. 6 - Ahmet Geçe
  9. 16 - Erhan Fidan
  10. 10 - Erhan Erkanlı
  11. 14 - Mehmet Emre
  12. 11 - Cevdet Döğer
  13. 17 - Erhan Çelik
  14. 2 - Tuncay Çağrı
  15. 12 - Veli Canlı
  16. 3 - Hale Birinci
  17. 8 - Mesut Bahtiyar
  18. 1 - Nuri Babayiğit

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = Ogrenciler.OrderByDescending(Ogrenci => Ogrenci.Soyadi);
  4.  
  5. Console.WriteLine("Soyadina göre ters sıralı öğrenci listesi :");
  6.  
  7. foreach (var Ogrenci in SiraliOgrenciListesi)
  8. {
  9. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  10. }
  11. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
  4. orderby Ogrenci.Soyadi.Length descending
  5. select Ogrenci;
  6.  
  7. Console.WriteLine("Soyadi uzunluğuna göre ters sıralı öğrenci listesi :");
  8.  
  9. foreach (var Ogrenci in SiraliOgrenciListesi)
  10. {
  11. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  12. }
  13. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. Soyadi uzunluğuna göre ters sıralı öğrenci listesi :
  2. 1 - Nuri Babayiğit
  3. 8 - Mesut Bahtiyar
  4. 3 - Hale Birinci
  5. 10 - Erhan Erkanlı
  6. 4 - Jale İkinci
  7. 7 - Tekin Uğurlu
  8. 9 - Lale Üçüncü
  9. 2 - Tuncay Çağrı
  10. 12 - Veli Canlı
  11. 15 - Fatma Teyze
  12. 13 - Ayşe Hanım
  13. 11 - Cevdet Döğer
  14. 16 - Erhan Fidan
  15. 17 - Erhan Çelik
  16. 6 - Ahmet Geçe
  17. 14 - Mehmet Emre
  18. 5 - Kenan Oran

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = Ogrenciler.OrderByDescending(Ogrenci => Ogrenci.Soyadi.Length);
  4.  
  5. Console.WriteLine("Soyadi uzunluğuna göre ters sıralı öğrenci listesi :");
  6.  
  7. foreach (var Ogrenci in SiraliOgrenciListesi)
  8. {
  9. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  10. }
  11. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = from Ogrenci in Ogrenciler
  4. orderby Ogrenci.Adi, Ogrenci.Soyadi
  5. select Ogrenci;
  6.  
  7. Console.WriteLine("Adı ve soyadına göre sıralı öğrenci listesi :");
  8.  
  9. foreach (var Ogrenci in SiraliOgrenciListesi)
  10. {
  11. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  12. }
  13. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. Adı ve soyadına göre sıralı öğrenci listesi :
  2. 6 - Ahmet Geçe
  3. 13 - Ayşe Hanım
  4. 11 - Cevdet Döğer
  5. 17 - Erhan Çelik
  6. 10 - Erhan Erkanlı
  7. 16 - Erhan Fidan
  8. 15 - Fatma Teyze
  9. 3 - Hale Birinci
  10. 4 - Jale İkinci
  11. 5 - Kenan Oran
  12. 9 - Lale Üçüncü
  13. 14 - Mehmet Emre
  14. 8 - Mesut Bahtiyar
  15. 1 - Nuri Babayiğit
  16. 7 - Tekin Uğurlu
  17. 2 - Tuncay Çağrı
  18. 12 - Veli Canlı

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciListesi = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Adi).ThenBy(Ogrenci => Ogrenci.Soyadi);
  4.  
  5. Console.WriteLine("Adı ve soyadına göre sıralı öğrenci listesi :");
  6.  
  7. foreach (var Ogrenci in SiraliOgrenciListesi)
  8. {
  9. Console.WriteLine("{0} - {1} {2}", Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi);
  10. }
  11. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciler = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Ortalama).ThenBy(Ogrenci => Ogrenci, new BayanlarOndenKarsilastirici());
  4.  
  5. Console.WriteLine("Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce bayan) :");
  6.  
  7. foreach (var Ogrenci in SiraliOgrenciler)
  8. {
  9. Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
  10. }
  11. Console.ReadLine();

Örnekte kullanılan karşılaştırma sınıfı (Comparer) şöyledir :

  1. public class BayanlarOndenKarsilastirici : IComparer
  2. {
  3. public int Compare(Kayit x, Kayit y)
  4. {
  5. if (x.Cinsiyet != y.Cinsiyet)
  6. return String.Compare(x.Cinsiyet, y.Cinsiyet);
  7.  
  8. return string.Compare(x.Adi, y.Adi);
  9. }
  10. }

Örneğin çıktısı şöyle olacaktır :

  1. Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce bayan) :
  2. Cevdet Döğer, ortalaması 16,25
  3. Lale Üçüncü, ortalaması 16,67
  4. Hale Birinci, ortalaması 25,00
  5. Tekin Uğurlu, ortalaması 30,00
  6. Mesut Bahtiyar, ortalaması 36,67
  7. Veli Canlı, ortalaması 43,33
  8. Nuri Babayiğit, ortalaması 65,00
  9. Mehmet Emre, ortalaması 66,33
  10. Kenan Oran, ortalaması 66,67
  11. Tuncay Çağrı, ortalaması 73,33
  12. Ahmet Geçe, ortalaması 76,67
  13. Erhan Çelik, ortalaması 78,33
  14. Ayşe Hanım, ortalaması 80,00
  15. Erhan Fidan, ortalaması 86,25
  16. Fatma Teyze, ortalaması 89,25
  17. Erhan Erkanlı, ortalaması 90,00
  18. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciler =
  4. from Ogrenci in Ogrenciler
  5. orderby Ogrenci.Sinif, Ogrenci.Ortalama descending
  6. select Ogrenci;
  7.  
  8. Console.WriteLine("Sınıflarına göre artan ve ortalamalarına göre azalan sırada öğrenci listesi :");
  9.  
  10. foreach (var Ogrenci in SiraliOgrenciler)
  11. {
  12. Console.WriteLine("{0} {1}, sınıfı {2}, ortalaması {3:0.00}.",
  13. Ogrenci.Adi,
  14. Ogrenci.Soyadi,
  15. Ogrenci.Sinif,
  16. Ogrenci.Ortalama);
  17. }
  18. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. Sınıflarına göre artan ve ortalamalarına göre azalan sırada öğrenci listesi :
  2. Erhan Erkanlı, sınıfı 1, ortalaması 90,00.
  3. Kenan Oran, sınıfı 1, ortalaması 66,67.
  4. Tekin Uğurlu, sınıfı 1, ortalaması 30,00.
  5. Erhan Fidan, sınıfı 2, ortalaması 86,25.
  6. Ayşe Hanım, sınıfı 2, ortalaması 80,00.
  7. Ahmet Geçe, sınıfı 2, ortalaması 76,67.
  8. Nuri Babayiğit, sınıfı 2, ortalaması 65,00.
  9. Hale Birinci, sınıfı 2, ortalaması 25,00.
  10. Jale İkinci, sınıfı 3, ortalaması 97,00.
  11. Fatma Teyze, sınıfı 3, ortalaması 89,25.
  12. Erhan Çelik, sınıfı 3, ortalaması 78,33.
  13. Lale Üçüncü, sınıfı 3, ortalaması 16,67.
  14. Cevdet Döğer, sınıfı 3, ortalaması 16,25.
  15. Tuncay Çağrı, sınıfı 4, ortalaması 73,33.
  16. Mehmet Emre, sınıfı 4, ortalaması 66,33.
  17. Veli Canlı, sınıfı 4, ortalaması 43,33.
  18. Mesut Bahtiyar, sınıfı 4, ortalaması 36,67.

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciler = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Sinif)
  4. .ThenByDescending(Ogrenci => Ogrenci.Ortalama);
  5.  
  6. Console.WriteLine("Sınıflarına göre artan ve ortalamalarına göre azalan sırada öğrenci listesi :");
  7.  
  8. foreach (var Ogrenci in SiraliOgrenciler)
  9. {
  10. Console.WriteLine("{0} {1}, sınıfı {2}, ortalaması {3:0.00}.",
  11. Ogrenci.Adi,
  12. Ogrenci.Soyadi,
  13. Ogrenci.Sinif,
  14. Ogrenci.Ortalama);
  15. }
  16. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var SiraliOgrenciler = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Ortalama)
  4. .ThenByDescending(Ogrenci => Ogrenci, new BayanlarOndenKarsilastirici());
  5.  
  6. Console.WriteLine("Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce erkek) :");
  7.  
  8. foreach (var Ogrenci in SiraliOgrenciler)
  9. {
  10. Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
  11. }
  12. Console.ReadLine();

Örnekte kullanılan karşılaştırma sınıfı (Comparer) şöyledir :

  1. public class BayanlarOndenKarsilastirici : IComparer
  2. {
  3. public int Compare(Kayit x, Kayit y)
  4. {
  5. if (x.Cinsiyet != y.Cinsiyet)
  6. return String.Compare(x.Cinsiyet, y.Cinsiyet);
  7.  
  8. return string.Compare(x.Adi, y.Adi);
  9. }
  10. }

Örneğin çıktısı şöyle olacaktır :

  1. Not ortalamasına göre sıralı öğrenci listesi (Aynı ise önce erkek) :
  2. Cevdet Döğer, ortalaması 16,25
  3. Lale Üçüncü, ortalaması 16,67
  4. Hale Birinci, ortalaması 25,00
  5. Tekin Uğurlu, ortalaması 30,00
  6. Mesut Bahtiyar, ortalaması 36,67
  7. Veli Canlı, ortalaması 43,33
  8. Nuri Babayiğit, ortalaması 65,00
  9. Mehmet Emre, ortalaması 66,33
  10. Kenan Oran, ortalaması 66,67
  11. Tuncay Çağrı, ortalaması 73,33
  12. Ahmet Geçe, ortalaması 76,67
  13. Erhan Çelik, ortalaması 78,33
  14. Ayşe Hanım, ortalaması 80,00
  15. Erhan Fidan, ortalaması 86,25
  16. Fatma Teyze, ortalaması 89,25
  17. Erhan Erkanlı, ortalaması 90,00
  18. 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.

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var TersListe = (from Ogrenci in Ogrenciler
  4. where Ogrenci.Cinsiyet == "Erkek"
  5. select Ogrenci).Reverse();
  6.  
  7. Console.WriteLine("Ters çevrilmiş liste (Sadece erkekler) :");
  8.  
  9. foreach (var Ogrenci in TersListe)
  10. {
  11. Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
  12. }
  13. Console.ReadLine();

Örneğin çıktısı şöyle olacaktır :

  1. Ters çevrilmiş liste (Sadece erkekler) :
  2. Erhan Çelik, ortalaması 78,33
  3. Erhan Fidan, ortalaması 86,25
  4. Erhan Erkanlı, ortalaması 90,00
  5. Kenan Oran, ortalaması 66,67
  6. Nuri Babayiğit, ortalaması 65,00
  7. Cevdet Döğer, ortalaması 16,25
  8. Mehmet Emre, ortalaması 66,33
  9. Ahmet Geçe, ortalaması 76,67
  10. Veli Canlı, ortalaması 43,33
  11. Mesut Bahtiyar, ortalaması 36,67
  12. Tekin Uğurlu, ortalaması 30,00
  13. Tuncay Çağrı, ortalaması 73,33

Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir:

  1. var Ogrenciler = OgrencileriGetir();
  2.  
  3. var TersListe = Ogrenciler.Where(Ogrenci => Ogrenci.Cinsiyet == "Erkek").Reverse();
  4.  
  5. Console.WriteLine("Ters çevrilmiş liste (Sadece erkekler) :");
  6.  
  7. foreach (var Ogrenci in TersListe)
  8. {
  9. Console.WriteLine("{0} {1}, ortalaması {2:0.00}", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Ortalama);
  10. }

Kaynak:
https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b



Diğer LINQ Makaleleri:


Yazan: 10.04.16 21:39

101,387p 4ü