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.
0

LINQ - Yığın (Aggregate) Örnekleri

Bu makalede bazı örneklerde kullanılan veri kaynağını görmek için tıklayın.

Count İle Eleman Sayısını Bulma Örneği

Count yöntemi, bir listedeki eleman sayısını döndürür.

Aşağıdaki örnek, öğrenci bilgilerini içeren bir veri kaynağındaki eleman sayısını (öğrenci sayısını) çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var OgrenciSayisi = Ogrenciler.Count();

Console.WriteLine("Tüm sınıflardaki öğrenci sayıları toplamı {0}.", OgrenciSayisi);

Console.ReadLine();

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

Tüm sınıflardaki öğrenci sayıları toplamı 17.

Count İle Şarta Uyan Elemanların Sayısını Bulma Örneği

Count yöntemi, verilen bir şarta uyan eleman sayısını döndürmek için kullanılabilir. Bunun için yönteme bir Lambda İfadesi parametre olarak gönderilir.

Aşağıdaki örnek, öğrenci bilgilerini içeren bir veri kaynağındaki başarılı öğrencilerin sayısını döndürür.

var Ogrenciler = OgrencileriGetir();

var BasariliOgrenciSayisi = Ogrenciler.Count(Ogrenci => Ogrenci.Basarili);

Console.WriteLine("Tüm sınıflardaki başarılı öğrenci sayıları toplamı {0}.", BasariliOgrenciSayisi);

Console.ReadLine();

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

Tüm sınıflardaki başarılı öğrenci sayıları toplamı 11.

İç İçe (Yuvalanmış, Nested) Count Kullanımı Örneği

Count yöntemi eleman olarak seçilen isimsiz bir sınıf veya sorgunun alt cümleciklerinde kullanılabilir.

Aşağıdaki örnek, öğrenci bilgilerini içeren bir veri kaynağındaki öğrencilerin ad, soyad ve not adetlerinden birer isimsiz sınıf oluşturarak seçer ve seçtiği verileri çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var OgrenciNotSayilari = from Ogrenci in Ogrenciler
                         select new { Ogrenci.Adi, Ogrenci.Soyadi, NotAdedi = Ogrenci.Notlar.Count() };

Console.WriteLine("Öğrenciler ve not sayıları :");

foreach (var Nesne in OgrenciNotSayilari)
{
    Console.WriteLine("{0} {1}, not adedi : {2}", Nesne.Adi, Nesne.Soyadi, Nesne.NotAdedi);
}

Console.ReadLine();

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

Öğrenciler ve not sayıları :
Tuncay Çağrı, not adedi : 3
Jale İkinci, not adedi : 4
Tekin Uğurlu, not adedi : 3
Mesut Bahtiyar, not adedi : 3
Veli Canlı, not adedi : 3
Ahmet Geçe, not adedi : 3
Fatma Teyze, not adedi : 4
Mehmet Emre, not adedi : 3
Hale Birinci, not adedi : 4
Ayşe Hanım, not adedi : 3
Cevdet Döğer, not adedi : 4
Nuri Babayiğit, not adedi : 3
Kenan Oran, not adedi : 3
Lale Üçüncü, not adedi : 3
Erhan Erkanlı, not adedi : 4
Erhan Fidan, not adedi : 4
Erhan Çelik, not adedi : 3

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

var Ogrenciler = OgrencileriGetir();

var OgrenciNotSayilari = Ogrenciler.Select(Ogrenci => new { Ogrenci.Adi, Ogrenci.Soyadi, NotAdedi = Ogrenci.Notlar.Count() });

Console.WriteLine("Öğrenciler ve not sayıları :");

foreach (var Nesne in OgrenciNotSayilari)
{
    Console.WriteLine("{0} {1}, not adedi : {2}", Nesne.Adi, Nesne.Soyadi, Nesne.NotAdedi);
}
Console.ReadLine();


Count İle Grupların Eleman Sayısını Bulma Örneği

Count yöntemi gruplandırma ile beraber grupların eleman sayılarını bulmak için kullanılabilir. Grupların sıralı olması isteniyorsa sorguda orderby cümleciği kullanılabilir veya gruplar daha sonra sıralanabilir.

Aşağıdaki örnek, öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri sınıflarına göre gruplara ayırarak grupların (sınıfların) öğrenci sayılarını bulup çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var Siniflar = from Ogrenci in Ogrenciler
               orderby Ogrenci.Sinif
               group Ogrenci by Ogrenci.Sinif into Sinifi
               select new { Sinif = Sinifi.Key, OgrenciSayisi = Sinifi.Count() };

Console.WriteLine("Sınıf öğrenci sayıları :");

foreach (var Satir in Siniflar)
{
    Console.WriteLine("{0}. sınıfta {1} öğrenci var.", Satir.Sinif, Satir.OgrenciSayisi);
}
Console.ReadLine();

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

Sınıf öğrenci sayıları :
1. sınıfta 3 öğrenci var.
2. sınıfta 5 öğrenci var.
3. sınıfta 5 öğrenci var.
4. sınıfta 4 öğrenci var.

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

var Ogrenciler = OgrencileriGetir();

var Siniflar = Ogrenciler.OrderBy(Ogrenci => Ogrenci.Sinif)
                         .GroupBy(Ogrenci => Ogrenci.Sinif)
                         .Select(Sinif => new { Sinif = Sinif.Key, OgrenciSayisi = Sinif.Count() });

Console.WriteLine("Sınıf öğrenci sayıları :");

foreach (var Satir in Siniflar)
{
    Console.WriteLine("{0}. sınıfta {1} öğrenci var.", Satir.Sinif, Satir.OgrenciSayisi);
}
Console.ReadLine();

Sum İle Toplam Hesaplama Örneği

Sum yöntemi veri kaynağındaki sayısal değerlerin toplamını bulmak için kullanılır.

Aşağıdaki örnek, bir tamsayı dizisinin elemanlarının toplamını bulup çıktıya yazar.

int[] sayilar = { 15, 24, 13, 35, 93, 81, 26, 47, 52, 90 };

int toplam = sayilar.Sum();

Console.WriteLine("Dizideki sayıların toplamı = {0}.", toplam);

Console.ReadLine();

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

Dizideki sayıların toplamı = 476.

Sum İle Üretilen Değerlerin Toplamını Hesaplama Örneği

Sum yöntemi ile veri kaynağındaki verilerden yeni değerler üreterek toplamını bulabiliriz.

Aşağıdaki örnek, bir string dizisindeki elemanların toplam karakter sayısını bulup çıktıya yazar.

string[] kelimeler = { "Ankara", "İstanbul", "İzmir", "Adana", "Antalya", "Bursa" };

int toplamKarakterSayisi = kelimeler.Sum(kelime => kelime.Length);

Console.WriteLine("Dizideki kelimelerde toplam {0} karakter var.", toplamKarakterSayisi);

Console.ReadLine();

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

Dizideki kelimelerde toplam 36 karakter var.

Sum İle Gruplardaki Değerlerin Toplamını Hesaplama Örneği

Sum yöntemi gruplandırma ile beraber kullanılarak gruplardaki değerlerin toplamlarını bulmak için kullanılabilir.

Aşağıdaki örnek, öğrenci bilgilerini içeren bir veri kaynağındaki öğrencileri sınıflarına göre gruplandırır ve her bir grubun (sınıfın) öğrencilerin okuduğu toplam kitap sayısını bulup çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var OkunanKitapSayilariToplamlari =
    from Ogrenci in Ogrenciler
    group Ogrenci by Ogrenci.Sinif into SinifGrubu
    select new { Sinifi = SinifGrubu.Key,
                 KitapOkumaSayilariToplami = SinifGrubu.Sum(GruptakiOgrenci => GruptakiOgrenci.OkunanKitapSayisi) };

Console.WriteLine("Sınıflara göre okunan kitap sayıları toplamları...");

foreach (var Satir in OkunanKitapSayilariToplamlari)
{
    Console.WriteLine("{0}. sınıftaki öğrenciler toplam {1} kitap okumuşlar.",
                      Satir.Sinifi,
                      Satir.KitapOkumaSayilariToplami);
}
Console.ReadLine();

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

Sınıflara göre okunan kitap sayıları toplamları...
4. sınıftaki öğrenciler toplam 34 kitap okumuşlar.
3. sınıftaki öğrenciler toplam 39 kitap okumuşlar.
1. sınıftaki öğrenciler toplam 20 kitap okumuşlar.
2. sınıftaki öğrenciler toplam 39 kitap okumuşlar.

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

var Ogrenciler = OgrencileriGetir();

var OkunanKitapSayilariToplamlari =
        Ogrenciler.GroupBy(Ogrenci => Ogrenci.Sinif)
                  .Select(SinifGrubu => new { Sinifi = SinifGrubu.Key,
                                              KitapOkumaSayilariToplami = SinifGrubu.Sum(GruptakiOgrenci => GruptakiOgrenci.OkunanKitapSayisi) });

Console.WriteLine("Sınıflara göre okunan kitap sayıları toplamları...");

foreach (var Satir in OkunanKitapSayilariToplamlari)
{
    Console.WriteLine("{0}. sınıftaki öğrenciler toplam {1} kitap okumuşlar.",
                      Satir.Sinifi,
                      Satir.KitapOkumaSayilariToplami);
}
Console.ReadLine();

Min İle En Küçük Değeri Bulma Örneği

Min yöntemi bir veri kaynağındaki en küçük değeri döndürür.

Aşağıdaki örnek, bir tamsayı dizisindeki en küçük değeri bulur ve çıktıya yazar.

int[] sayilar = { 22, 55, 33, 2, 0, -20, 3, 33 };

int EnKucukSayi = sayilar.Min();

Console.WriteLine("Dizideki en küçük sayı = {0}", EnKucukSayi);

Console.ReadLine();

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

Dizideki en küçük sayı = -20

Min İle Şarta Uyan En Küçük Değeri Bulma Örneği

Min yöntemininin bir Lambda İfadesi ile birlikte kullanımı, veri kaynağındaki şarta uyan en küçük değeri döndürür.

Aşağıdaki örnek, bir metin dizisindeki en kısa metnin karakter sayısını döndürür.

string[] Kelimeler = { "Ankara", "İstanbul", "İzmir", "Adana", "Antalya", "Bursa" };

int KarakterSayisi = Kelimeler.Min(Kelime => Kelime.Length);

Console.WriteLine("Dizideki en kısa kelimede toplam {0} karakter var.", KarakterSayisi);

Console.ReadLine();

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

Dizideki en kısa kelimede toplam 5 karakter var.

Min İle Gruplardaki En Küçük Değerleri Bulma Örneği

Min yöntemi ile gruplardaki en küçük değerleri bulmak için kullanılabilir.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtları sınıflarına göre gruplandırır. Sınıf adı ve Min yöntemiyle bulduğu sınıftaki en küçük ortalamadan bir isimsiz sınıf oluşturup seçer ve çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnDusukOrtalamalar =
                from Ogrenci in Ogrenciler
                group Ogrenci by Ogrenci.Sinif into SinifGrubu
                select new { Sinif = SinifGrubu.Key,
                             EnDusukOrtalama = SinifGrubu.Min(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama) };

Console.WriteLine("Sınıflardaki en düşük ortalamalar.");

foreach (var Satir in SiniflardakiEnDusukOrtalamalar)
{
    Console.WriteLine("{0}. sınıftaki en düşük ortalama = {1}", Satir.Sinif, Satir.EnDusukOrtalama);
}
Console.ReadLine();

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

4. sınıftaki en düşük ortalama = 36,6666666666667
3. sınıftaki en düşük ortalama = 16,25
1. sınıftaki en düşük ortalama = 30
2. sınıftaki en düşük ortalama = 25

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

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnDusukOrtalamalar =
               Ogrenciler.GroupBy(Ogrenci => Ogrenci.Sinif)
                         .Select(SinifGrubu =>
                                 new {
                                       Sinif = SinifGrubu.Key,
                                       EnDusukOrtalama = SinifGrubu.Min(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
                                     }
                                );

Console.WriteLine("Sınıflardaki en düşük ortalamalar.");

foreach (var Satir in SiniflardakiEnDusukOrtalamalar)
{
    Console.WriteLine("{0}. sınıftaki en düşük ortalama = {1}", Satir.Sinif, Satir.EnDusukOrtalama);
}Console.ReadLine(); 

Min İle Gruplardan Eleman Seçme Örneği

Min yöntemi ile gruplardaki en küçük değere sahip elemanları elemanları seçmek için kullanılabilir.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtları sınıflarına göre gruplandırır. Let cümleciği ile gruptaki en düşük ortalama notu seçerek oluşturduğu bir değişken (EnDusukOrtalama) yardımıyla gruptaki bu ortalamaya sahip öğrencilerden ve ortalamasından bir isimsiz sınıf oluşturarak seçer. Bu yolla belirlenen ortalamaya sahip kaç öğrenci varsa bunların tümü seçilir. Dolayısıyla çıktıya isimsiz sınıftaki ogrencileri içeren listeden (EnDusukOrtalamaliOgrenciler) bir öğrenci yazdırmak için First yöntemi ile ilk öğrenci seçilmektedir.

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnDusukOrtalamaliOgrenciler =
                from Ogrenci in Ogrenciler
                group Ogrenci by Ogrenci.Sinif into SinifGrubu
                let EnDusukOrtalama = SinifGrubu.Min(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
                select new { Sinif = SinifGrubu.Key,
                             EnDusukOrtalamaliOgrenciler = SinifGrubu.Where(Ogrenci => Ogrenci.Ortalama == EnDusukOrtalama) };

Console.WriteLine("Sınıflardaki en düşük ortalamalı öğrenciler.");

foreach (var Satir in SiniflardakiEnDusukOrtalamaliOgrenciler)
{
    Console.WriteLine("{0}. sınıftaki en düşük ortalamalı öğrenci ortalaması {1} olan {2} isimli öğrencidir.",
                      Satir.Sinif,
                      Satir.EnDusukOrtalamaliOgrenciler.First().Ortalama,
                      Satir.EnDusukOrtalamaliOgrenciler.First().Adi);
}
Console.ReadLine();

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

Sınıflardaki en düşük ortalamalı öğrenciler.
4. sınıftaki en düşük ortalamalı öğrenci ortalaması 36,6666666666667 olan Mesut isimli öğrencidir.
3. sınıftaki en düşük ortalamalı öğrenci ortalaması 16,25 olan Cevdet isimli öğrencidir.
1. sınıftaki en düşük ortalamalı öğrenci ortalaması 30 olan Tekin isimli öğrencidir.
2. sınıftaki en düşük ortalamalı öğrenci ortalaması 25 olan Hale isimli öğrencidir.

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

// let'in yordam karşılığı olmadığından Grup ve Gruptaki en düşük ortalamadan yeni bir isimsiz
// nesne oluşturulup bu nesne üzerinden Select çalıştırılarak aynı sonuca gidildi.

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnDusukOrtalamaliOgrenciler =
                    Ogrenciler.GroupBy(Ogrenci => Ogrenci.Sinif)
                    .Select(SinifGrubu => new {
                        SinifGrubu = SinifGrubu,
                        EnDusukOrtalama = SinifGrubu.Min(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
                    })
                    .Select(Satir => new
                    {
                        Sinif = Satir.SinifGrubu.Key,
                        EnDusukOrtalamaliOgrenci = Satir.SinifGrubu.Where(Ogrenci => Ogrenci.Ortalama == Satir.EnDusukOrtalama)
                    });

Console.WriteLine("Sınıflardaki en düşük ortalamalı öğrenciler.");

foreach (var Satir in SiniflardakiEnDusukOrtalamaliOgrenciler)
{
    Console.WriteLine("{0}. sınıftaki en düşük ortalamalı öğrenci ortalaması {1} olan {2} isimli öğrencidir.",
                      Satir.Sinif,
                      Satir.EnDusukOrtalamaliOgrenci.First().Ortalama,
                      Satir.EnDusukOrtalamaliOgrenci.First().Adi);
}Console.ReadLine(); 

Max İle En Büyük Değeri Bulma Örneği

Max yöntemi bir veri kaynağındaki en büyük değeri döndürür.

Aşağıdaki örnek, bir tamsayı dizisindeki en büyük değeri bulur ve çıktıya yazar.

int[] sayilar = { 22, 55, 33, 2, 0, -20, 3, 33 };

int EnBuyukSayi = sayilar.Max();

Console.WriteLine("Dizideki en büyük sayı = {0}", EnKucukSayi);

Console.ReadLine();

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

Dizideki en büyük sayı = 55

Max İle Şarta Uyan En Büyük Değeri Bulma Örneği

Max yönteminin bir Lambda İfadesi ile birlikte kullanımı, veri kaynağındaki şarta uyan en büyük değeri döndürür.

Aşağıdaki örnek, bir metin dizisindeki en uzun metnin karakter sayısını döndürür.

string[] Kelimeler = { "Ankara", "İstanbul", "İzmir", "Adana", "Antalya", "Bursa" };

int KarakterSayisi = Kelimeler.Max(Kelime => Kelime.Length);

Console.WriteLine("Dizideki en uzun kelimede toplam {0} karakter var.", KarakterSayisi);

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

Dizideki en uzun kelimede toplam 8 karakter var.

Max İle Gruplardaki En Büykü Değerleri Bulma Örneği

Max yöntemi ile gruplardaki en büyük değerleri bulmak için kullanılabilir.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtları sınıflarına göre gruplandırır. Sınıf adı ve Max yöntemiyle bulduğu sınıftaki en büyük ortalamadan bir isimsiz sınıf oluşturup seçer ve çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnYuksekOrtalamalar =
                from Ogrenci in Ogrenciler
                group Ogrenci by Ogrenci.Sinif into SinifGrubu
                select new { Sinif = SinifGrubu.Key,
                             EnYuksekOrtalama = SinifGrubu.Max(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama) };

Console.WriteLine("Sınıflardaki en yüksek ortalamalar.");

foreach (var Satir in SiniflardakiEnYuksekOrtalamalar)
{
    Console.WriteLine("{0}. sınıftaki en yüksek ortalama = {1}", Satir.Sinif, Satir.EnYuksekOrtalama);
}
Console.ReadLine();

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

Sınıflardaki en yüksek ortalamalar.
4. sınıftaki en yüksek ortalama = 73,3333333333333
3. sınıftaki en yüksek ortalama = 97
1. sınıftaki en yüksek ortalama = 90
2. sınıftaki en yüksek ortalama = 86,25

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

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnYuksekOrtalamalar =
               Ogrenciler.GroupBy(Ogrenci => Ogrenci.Sinif)
                         .Select(SinifGrubu =>
                                 new {
                                       Sinif = SinifGrubu.Key,
                                       EnYuksekOrtalama = SinifGrubu.Max(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
                                     }
                                );

Console.WriteLine("Sınıflardaki en yüksek ortalamalar.");

foreach (var Satir in SiniflardakiEnYuksekOrtalamalar)
{
    Console.WriteLine("{0}. sınıftaki en yüksek ortalama = {1}", Satir.Sinif, Satir.EnYuksekOrtalama);
}Console.ReadLine(); 

Max İle Gruplardan Eleman Seçme Örneği

Max yöntemi ile gruplardaki en büyük değere sahip elemanları elemanları seçmek için kullanılabilir.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtları sınıflarına göre gruplandırır. Let cümleciği ile gruptaki en yüksek ortalama notu seçerek oluşturduğu bir değişken (EnYuksekOrtalama) yardımıyla gruptaki bu ortalamaya sahip öğrencilerden ve ortalamasından bir isimsiz sınıf oluşturarak seçer. Bu yolla belirlenen ortalamaya sahip kaç öğrenci varsa bunların tümü seçilir. Dolayısıyla çıktıya isimsiz sınıftaki ogrencileri içeren listeden (EnYuksekOrtalamaliOgrenciler) bir öğrenci yazdırmak için First yöntemi ile ilk öğrenci seçilmektedir.

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnYuksekOrtalamaliOgrenciler =
                from Ogrenci in Ogrenciler
                group Ogrenci by Ogrenci.Sinif into SinifGrubu
                let EnYuksekOrtalama = SinifGrubu.Max(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
                select new { Sinif = SinifGrubu.Key,
                             EnYuksekOrtalamaliOgrenciler = SinifGrubu.Where(Ogrenci => Ogrenci.Ortalama == EnYuksekOrtalama) };

Console.WriteLine("Sınıflardaki en yüksek ortalamalı öğrenciler.");

foreach (var Satir in SiniflardakiEnYuksekOrtalamaliOgrenciler)
{
    Console.WriteLine("{0}. sınıftaki en yüksek ortalamalı öğrenci ortalaması {1} olan {2} isimli öğrencidir.",
                      Satir.Sinif,
                      Satir.EnYuksekOrtalamaliOgrenciler.First().Ortalama,
                      Satir.EnYuksekOrtalamaliOgrenciler.First().Adi);
}
Console.ReadLine();

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

Sınıflardaki en yüksek ortalamalı öğrenciler.
4. sınıftaki en yüksek ortalamalı öğrenci ortalaması 73,3333333333333 olan Tuncay isimli öğrencidir.
3. sınıftaki en yüksek ortalamalı öğrenci ortalaması 97 olan Jale isimli öğrencidir.
1. sınıftaki en yüksek ortalamalı öğrenci ortalaması 90 olan Erhan isimli öğrencidir.
2. sınıftaki en yüksek ortalamalı öğrenci ortalaması 86,25 olan Erhan isimli öğrencidir.

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

// let'in yordam karşılığı olmadığından Grup ve Gruptaki en yüksek ortalamadan yeni bir isimsiz
// nesne oluşturulup bu nesne üzerinden Select çalıştırılarak aynı sonuca gidildi.

var Ogrenciler = OgrencileriGetir();

var SiniflardakiEnYuksekOrtalamaliOgrenciler =
                    Ogrenciler.GroupBy(Ogrenci => Ogrenci.Sinif)
                    .Select(SinifGrubu => new {
                        SinifGrubu = SinifGrubu,
                        EnYuksekOrtalama = SinifGrubu.Max(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
                    })
                    .Select(Satir => new {
                        Sinif = Satir.SinifGrubu.Key,
                        EnYuksekOrtalamaliOgrenci = Satir.SinifGrubu.Where(Ogrenci => Ogrenci.Ortalama == Satir.EnYuksekOrtalama)
                    });

Console.WriteLine("Sınıflardaki en yüksek ortalamalı öğrenciler.");

foreach (var Satir in SiniflardakiEnYuksekOrtalamaliOgrenciler)
{
    Console.WriteLine("{0}. sınıftaki en yüksek ortalamalı öğrenci ortalaması {1} olan {2} isimli öğrencidir.",
                      Satir.Sinif,
                      Satir.EnYuksekOrtalamaliOgrenci.First().Ortalama,
                      Satir.EnYuksekOrtalamaliOgrenci.First().Adi);
}Console.ReadLine(); 

Average İle Ortalama Hesaplama Örneği

Average yöntemi bir veri kaynağındaki değerlerin ortalamasını döndürür.

Aşağıdaki örnek, bir tamsayı dizisindeki sayıların ortalamsını bulur ve çıktıya yazar.

int[] sayilar = { 51, 14, 21, 23, 93, 83, 26, 37, 42, 50 };

double ortalama = sayilar.Average();

Console.WriteLine("Dizideki sayıların ortalaması {0}.", ortalama);

Console.ReadLine();

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

Dizideki sayıların ortalaması 44.

Average İle Şarta Uyan Değerlerin Ortalamasını Hesaplama Örneği

Average yöntemi, bir Lambda İfadesi ile kullanıldığında veri kaynağındaki şarta uyan değerlerin ortalamasını döndürür.

Aşağıdaki örnek, bir metin dizisindeki metinlerin ortalama uzunluğunu bulur ve çıktıya yazar.

string[] Kelimeler = { "Ankara", "İstanbul", "İzmir", "Adana", "Antalya", "Bursa" };

double OrtalamaUzunluk = Kelimeler.Average(Kelime => Kelime.Length);

Console.WriteLine("Dizideki kelimelerin ortalama uzunluğu = {0}", OrtalamaUzunluk);

Console.ReadLine();

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

Dizideki kelimelerin ortalama uzunluğu = 6

Average İle Gruplardaki Değerlerin Ortalamasını Hesaplama Örneği

Average yöntemi gruplardaki seçilen değerlerin ortalamasını bulmak için kullanılabilir.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtları sınıflarına göre gruplandırır ve grupların not ortalamasını bularak çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var SiniflarinNotOrtalamalari =
           from Ogrenci in Ogrenciler
           group Ogrenci by Ogrenci.Sinif into SinifGrubu
           select new
           {
               Sinifi = SinifGrubu.Key,
               OrtalamaNot = SinifGrubu.Average(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
           };

Console.WriteLine("Sınıfların not ortalamaları :");

foreach (var Satir in SiniflarinNotOrtalamalari)
{
    Console.WriteLine("{0}. sınıfın not ortalaması = {1}", Satir.Sinifi, Satir.OrtalamaNot);
}
Console.ReadLine();

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

Sınıfların not ortalamaları :
4. sınıfın not ortalaması = 54,9166666666667
3. sınıfın not ortalaması = 59,5
1. sınıfın not ortalaması = 62,2222222222222
2. sınıfın not ortalaması = 66,5833333333333

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

var Ogrenciler = OgrencileriGetir();

var SiniflarinNotOrtalamalari =

           Ogrenciler.GroupBy(Ogrenci => Ogrenci.Sinif)
           .Select(SinifGrubu => new
           {
               Sinif = SinifGrubu.Key,
               OrtalamaNot = SinifGrubu.Average(SiniftakiOgrenci => SiniftakiOgrenci.Ortalama)
           });
    
Console.WriteLine("Sınıfların not ortalamaları :");

foreach (var Satir in SiniflarinNotOrtalamalari)
{
    Console.WriteLine("{0}. sınıfın not ortalaması = {1}", Satir.Sinif, Satir.OrtalamaNot);
}Console.ReadLine(); 

Aggregate İle Yığma Örneği

Aggregate yöntemi, bir veri kümesindeki tüm elemanları sırayla belirlenen bir işleme tabi tutarak bir yığın değer elde etmek için 2 parametreli bir Lambda İfadesi ile beraber kullanılır. Lambda İfadesinin (2 parametreli isimsiz fonksiyon), 1. parametresi yığın değişkenin son değerini, 2. parametresi ise sıradaki elemanın referansını barındırır.

Aşağıdaki örnek, bir tamsayı dizisindeki sayıların çarpımını bulur ve çıktıya yazar.

double[] OndalikSayilar = { 1.7, 2.3, 1.9, 4.1, 2.9 };

double Carpim = OndalikSayilar.Aggregate((SonSonuc, SiradakiDiziElemani) => SonSonuc * SiradakiDiziElemani);

Console.WriteLine("Dizideki sayıların çarpımı = {0}", Carpim);

Console.ReadLine();

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

Dizideki sayıların çarpımı = 88,33081

Aggregate İle Bir Başlangıç Değeri Vererek Yığma Örneği

Aggregate yöntemi ile bir başlangıç değeri de kullanılabilir.

Aşağıdaki örnek, BaslangicBakiyesi şeklinde isimlendirilen bir değerden, hesaptan çekilmek istenen tutarları tutan bir tamsayı dizisindeki değerleri, çekilmek istenen tutarı karşılamayıncaya kadar çıkartır.

double BaslangicBakiyesi = 100.0;

int[] CekilmekIstenenler = { 20, 10, 40, 50, 10, 70, 30 };

double Bakiye =
                CekilmekIstenenler.Aggregate(BaslangicBakiyesi,
                                             (SonBakiye, SiradakiTutar) =>
                                                    (
                                                     (SiradakiTutar <= SonBakiye) ?
                                                     (SonBakiye - SiradakiTutar) :
                                                      SonBakiye
                                                    )
                                            );

Console.WriteLine("Son kalan: {0}", Bakiye);

Console.ReadLine();

Örnekte 100.0 değerinden, 20, 10 ve 40 değerlerini çıkarttıktan sonra, 100.0'e tamamlamak için kalan 30 değerini de çıktıktan sonra şart sağlanmadığından işlem yapmayacak ve sıradaki tutardan kalanı (20) döndürecektir.

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

Son kalan: 20

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



Diğer LINQ Makaleleri:


Yazan: 10.04.16 23:17

101,387p 4ü