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