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 - Bölümleme (Partitioning) Örnekleri

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

Basit Take Örneği

Take yöntemi, bir listeden baştan itibaren istenilen sayıdaki elemanlarını verir.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağından seçtiği ilk 5 sıradaki öğrencilerin ad ve soyad bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var Ilk5Ogrenci = Ogrenciler.Take(5);

Console.WriteLine("Listedeki ilk 5 öğrenci :");

foreach (var Ogrenci in Ilk5Ogrenci)
{
    Console.WriteLine("{0} {1}", Ogrenci.Adi, Ogrenci.Soyadi);
}
Console.ReadLine();

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

Listedeki ilk 5 öğrenci :
Tuncay Çağrı
Jale İkinci
Tekin Uğurlu
Mesut Bahtiyar
Veli Canlı

Yuvalanmış (Nested) Take Örneği

Take yöntemi (Enumerable.Take), bir listenin baştan istenilen sayıda elemanını seçer. Take, aşağıdaki örnekte olduğu gibi bir sorgunun sonuna eklenebilir.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki tam not alan öğrencilerden ilk 2 tanesinin adı ve not bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var Ilk2TamNot = (from Ogrenci in Ogrenciler
                  from Not in Ogrenci.Notlar
                  where Not == 100
                  select new {Ogrenci.Adi, Not}).Take(2);

Console.WriteLine("İlk 2 tam not :");

foreach (var Satir in Ilk2TamNot)
{
    Console.WriteLine("{0} {1}", Satir.Adi, Satir.Not);
}
Console.ReadLine();

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

İlk 2 tam not :
Jale 100
Ayşe 100

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

var Ogrenciler = OgrencileriGetir();

var Ilk2TamNot =
       Ogrenciler.SelectMany(Ogrenci => Ogrenci.Notlar.Where(Notu => Notu == 100)
                              ,
                             (Ogrenci, Notu) => new { Ogrenci.Adi, Not = Notu }
                            ).Take(2);

Console.WriteLine("İlk 2 tam not :");

foreach (var Satir in Ilk2TamNot)
{
    Console.WriteLine("{0} {1}", Satir.Adi, Satir.Not);
}
Console.ReadLine();

Basit Skip Örneği

Skip yöntemi (Enumerable.Skip), bir listenin baştan istenilen sayıda elemanını atlar ve sonraki elemanları seçer.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki son 2 öğrencinin adı ve soyadı bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var Son2Ogrenci = (from Ogrenci in Ogrenciler
                   select Ogrenci).Skip(Ogrenciler.Count() - 2);

Console.WriteLine("Listedeki son 2 öğrenci :");

foreach (var Ogrenci in Son2Ogrenci)
{
    Console.WriteLine("{0} {1}", Ogrenci.Adi, Ogrenci.Soyadi);
}
Console.ReadLine();

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

Listedeki son 2 öğrenci :
Erhan Fidan
Erhan Çelik

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

var Ogrenciler = OgrencileriGetir();

var Son2Ogrenci = Ogrenciler.Skip(Ogrenciler.Count() - 2);

Console.WriteLine("Listedeki son 2 öğrenci :");

foreach (var Ogrenci in Son2Ogrenci)
{
    Console.WriteLine("{0} {1}", Ogrenci.Adi, Ogrenci.Soyadi);
}Console.ReadLine(); 

Yuvalanmış (Nested) Skip Örneği

Skip yöntemi (Enumerable.Skip), bir listenin baştan istenilen sayıda elemanını atlar ve sonraki elemanları seçer. Alttaki örnekte görüldüğü gibi Skip, bir sorgunun sonuna eklenebilir.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki ilk 2 tam not alan öğrenciden sonraki tam not alan öğrencilerin adı ve notu bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var Ilk2DenSonrakiTamNotlar = (from Ogrenci in Ogrenciler
                               from Not in Ogrenci.Notlar
                               where Not == 100
                               select new { Ogrenci.Adi, Not }).Skip(2);

Console.WriteLine("İlk 2 tam notdan sonraki tam notlar :");

foreach (var Satir in Ilk2DenSonrakiTamNotlar)
{
    Console.WriteLine("{0} {1}", Satir.Adi, Satir.Not);
}
Console.ReadLine();

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

İlk 2 tam notdan sonraki tam notlar :
Ayşe 100
Erhan 100

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

var Ogrenciler = OgrencileriGetir();

var Ilk2DenSonrakiTamNotlar =
       Ogrenciler.SelectMany(Ogrenci => Ogrenci.Notlar.Where(Notu => Notu == 100)
                              ,
                             (Ogrenci, Notu) => new { Ogrenci.Adi, Not = Notu }
                            ).Skip(2);

Console.WriteLine("İlk 2 tam notdan sonraki tam notlar :");

foreach (var Satir in Ilk2DenSonrakiTamNotlar)
{
    Console.WriteLine("{0} {1}", Satir.Adi, Satir.Not);
}Console.ReadLine(); 

Basit TakeWhile Örneği

TakeWhile yöntemi (Enumerable.TakeWhile), bir listenin baştan itibaren verilen bir şarta uyan elemanlarını seçer şart sağlandığı sürece seçer.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki ilk başarısız öğrenciye kadar olan öğrencilerin adı, soyadı ve not ortalaması bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var IlkBasarililar = Ogrenciler.TakeWhile(Ogrenci => Ogrenci.Ortalama >= 55);

Console.WriteLine("İlk başarısız öğrenciye kadar öğrenciler :");

foreach (var BasariliOgrenci in IlkBasarililar)
{
    Console.WriteLine("{0} {1}, ortalaması : {2:0.00}", BasariliOgrenci.Adi, BasariliOgrenci.Soyadi, BasariliOgrenci.Ortalama);
}
Console.ReadLine();

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

İlk başarısız öğrenciye kadar öğrenciler :
Tuncay Çağrı, ortalaması : 73,33
Jale İkinci, ortalaması : 97,00

Dizinli (Indexed) TakeWhile Örneği

TakeWhile yönteminin (Enumerable.TakeWhile) 2. kullanım şeklinde yöntem tarafından, listenin sıradaki elemanı ve aynı zamanda elemanın listedeki sıra numarası Lambda İfadesi olarak tanımlanabilecek bir isimsiz fonksiyona geçilir. Biz de bu fonksiyon yardımı ile kayıt atlama sürecinde elemanın sıra numarası ile ilgili olarak dikkate alınacak durumları işleriz.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağından sıra numarasına (index) bakarak seçtiği ilk 5 öğrencinin ad ve soyad bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var Ilk5Ogrenci = Ogrenciler.TakeWhile((Ogrenci, Index) => Index <= 4);

Console.WriteLine("İlk 5 öğrenci :");

foreach (var Ogrenci in Ilk5Ogrenci)
{
    Console.WriteLine("{0} {1}", Ogrenci.Adi, Ogrenci.Soyadi);
}
Console.ReadLine();

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

İlk 5 öğrenci :
Tuncay Çağrı
Jale İkinci
Tekin Uğurlu
Mesut Bahtiyar
Veli Canlı

Basit SkipWhile Örneği

SkipWhile yöntemi (Enumerable.SkipWhile), bir listenin baştan itibaren verilen bir şarta uyan elemanlarını şart sağlandığı sürece atlar ve sonraki elemanlarını seçer.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki ilk başarısız öğrenciye kadar atlayıp, bu öğrenci ve sonraki öğrencilerin adı, soyadı ve yaş bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var IlkBasarisizVeSonrasi = Ogrenciler.SkipWhile(Ogrenci => Ogrenci.Ortalama >= 55);

Console.WriteLine("İlk başarısız öğrenci ve sonraki öğrenciler :");

foreach (var Ogrenci in IlkBasarisizVeSonrasi)
{
    Console.WriteLine("{0} {1}, yaşı {2}.", Ogrenci.Adi, Ogrenci.Soyadi, Ogrenci.Yasi);
}
Console.ReadLine();

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

İlk başarısız öğrenci ve sonraki öğrenciler :
Tekin Uğurlu, yaşı 58.
Mesut Bahtiyar, yaşı 33.
Veli Canlı, yaşı 20.
Ahmet Geçe, yaşı 55.
Fatma Teyze, yaşı 41.
Mehmet Emre, yaşı 43.
Hale Birinci, yaşı 31.
Ayşe Hanım, yaşı 30.
Cevdet Döğer, yaşı 46.
Nuri Babayiğit, yaşı 15.
Kenan Oran, yaşı 52.
Lale Üçüncü, yaşı 23.
Erhan Erkanlı, yaşı 55.
Erhan Fidan, yaşı 45.
Erhan Çelik, yaşı 35.

Dizinli (Indexed) SkipWhile Örneği

SkipWhile yönteminin (Enumerable.SkipWhile  2. kullanım şeklinde yöntem tarafından, listenin sıradaki elemanı ve aynı zamanda elemanın listedeki sıra numarası Lambda İfadesi olarak tanımlanabilecek bir isimsiz fonksiyona geçilir. Biz de bu fonksiyon yardımı ile kayıt atlama sürecinde elemanın sıra numarası ile ilgili olarak dikkate alınacak durumları işleriz.

Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki ilk 8 öğrenciye kadar olan öğrencileri atlayıp, bu öğrenci ve sonraki öğrencilerin adı ve soyadı bilgilerinden bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar.

var Ogrenciler = OgrencileriGetir();

var SekizinciVeSonrasi = Ogrenciler.SkipWhile((Ogrenci, Index) => Index < 7);

Console.WriteLine("Sekizinci öğrenci ve sonrakiler :");

foreach (var Ogrenci in SekizinciVeSonrasi)
{
    Console.WriteLine("{0} {1}", Ogrenci.Adi, Ogrenci.Soyadi);
}
Console.ReadLine();

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

Sekizinci öğrenci ve sonrakiler :
Mehmet Emre
Hale Birinci
Ayşe Hanım
Cevdet Döğer
Nuri Babayiğit
Kenan Oran
Lale Üçüncü
Erhan Erkanlı
Erhan Fidan
Erhan Çelik

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



Diğer LINQ Makaleleri:


Yazan: 10.04.16 21:18
canora
101,384p 4ü