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.

Yazılım Makaleleri

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.

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:


Yazan: 10.04.16 21:39

101,387p 4ü