Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
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.

Makale Geçmişi

«« Makaleye geri dön
20.06.16 21:19
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. 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 Diğer LINQ Makaleleri: LINQ Örnekleri makalelerinde kullanılan verikaynağı LINQ (Language Integrated Query - Dile Entegre Edilmiş Sorgu) Nedir? LINQ Sağlayıcıları (LINQ Providers) LINQ Yöntem Sözdizimi (LINQ Method Syntax) LINQ - Temel İşlemler - Bir Veri Kaynağı Bildirme ve Seçme (From ve Select) LINQ - Temel İşlemler - Süzme (Filtering) LINQ - Temel İşlemler - Sıralama (Ordering) LINQ - Temel İşlemler - Gruplama (Grouping) LINQ - Temel İşlemler - Birleştirme (Joining) LINQ - Deferred Execution - Ertelenmiş Çalıştırma LINQ - Immediate Execution - Anında Çalıştırma LINQ - Query Reuse - Sorgunun Yeniden Kullanımı LINQ - Kısıtlama (Restriction) Kullanım Örnekleri LINQ - Yansıtma (Projection) - Select Kullanım Örnekleri LINQ - Yansıtma (Projection) - SelectMany Kullanım Örnekleri LINQ - Bölümleme (Partitioning) Örnekleri LINQ - Sıralama (Ordering) Örnekleri  (Bu makale) LINQ - Gruplama (Grouping) Örnekleri LINQ - Küme (Set) Örnekleri LINQ - Dönüşüm (Conversion) Örnekleri LINQ - Eleman (Element) Seçimi Örnekleri LINQ - Oluşturma (Generation) Örnekleri LINQ - Miktar Belirleyiciler (Quantifiers) Örnekleri LINQ - Yığın (Aggregate) Örnekleri LINQ - Birleştirme (Join) İşlemleri LINQ - Özel Dizilim (Custom Sequence) Örneği LINQ - Concat ve SequenceEqual İle Örnekle r
Ekleyen: canora
Değiştiren: canora
10.04.16 21:39
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. 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 ); }
Ekleyen: canora

En fazla 3 eski durum gösterilir.