20.06.16 21:18
LINQ - Yansıtma (Projection) - Select Kullanım Örnekleri
Bu makalede kullanılan veri kaynağını görmek için tıklayın . Basit Select Kullanımı 1 LINQ sorgularında çoğunlukla bitiş
olarak görülen SELECT cümleciği ile o anda sayılan eleman bildirilirse
bu eleman seçilir. Ancak aşağıdaki örnekteki gibi oluşturulacak yeni
listede kullanılmak üzere elemanın kendisi değil bir özelliği de
seçilebilir ve yeni liste (örneğimizde OgrenciSoyadlari) bu değerlerden
oluşur. İleride göreceğimiz gibi SELECT bazen çok farklı bir isimsiz
sınıf oluşturup onu da seçebilir. Bu örnek öğrenci bilgilerini içeren bir veri kaynağından öğrencilerin soyadlarını seçer. var Ogrenciler = OgrencileriGetir(); var OgrenciSoyadlari = from Ogrenci in Ogrenciler select Ogrenci.Soyadi; Console.WriteLine("Öğrencilerin soyadları :"); foreach (var Soyad in OgrenciSoyadlari) { Console.WriteLine(Soyad); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 1. Sınıftaki Başarılı öğrenciler... Oran, Kenan Erkanlı, Erhan Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var OgrenciSoyadlari = Ogrenciler.Select(Ogrenci => Ogrenci.Soyadi); Console.WriteLine("Öğrencilerin soyadları :"); foreach (var Soyad in OgrenciSoyadlari) { Console.WriteLine(Soyad); } Console.ReadLine(); Basit Select Kullanımı 2 Bu örnek, bir tamsayılar dizisindeki elemanların 1 fazlalarını seçer. int[] Sayilar = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var SayilarArtiBir = from Sayi in Sayilar select Sayi + 1; Console.WriteLine("Sayılar + 1:"); foreach (var i in SayilarArtiBir) { Console.WriteLine(i); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Sayılar + 1: 6 5 2 4 10 9 7 8 3 1 Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: int[] Sayilar = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var SayilarArtiBir = Sayilar.Select(Sayi => Sayi + 1); Console.WriteLine("Sayılar + 1:"); foreach (var i in SayilarArtiBir) { Console.WriteLine(i); } Console.ReadLine(); Select Dönüştürme (Transformation) Bu örnek öğrenci bilgilerini içeren bir veri kaynağından ve öğrenci kuluplerinin bilgilerini içeren ikinci bir veri kaynağından öğrencilerin adlarını ve kulüplerin adlarını seçerek öğrencilerin adları ve üye oldukları kulüplerin adlarından yeni bir liste oluşturur. Öğrenciler veri kaynağındaki kayıtlarda öğrenci kulüpleri, kulüp veri kaynağındaki kulübün sıra numarası ve aynı zamanda kayıt numarası olan bir numara ile belirlenmiştir. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = from Ogrenci in Ogrenciler select Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi; Console.WriteLine("Öğrencilerin üye olduğu kulüpler :"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine(Satir); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrencilerin üye olduğu kulüpler : Tuncay: Gezi Jale: Tiyatro Tekin: Tiyatro Mesut: Tiyatro Veli: Müzik Ahmet: Müzik Fatma: Tiyatro Mehmet: Gezi Hale: Tiyatro Ayşe: Tiyatro Cevdet: Müzik Nuri: Müzik Kenan: Gezi Lale: Gezi Erhan: Tiyatro Erhan: Tiyatro Erhan: Tiyatro Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi); Console.WriteLine("Öğrencilerin üye olduğu kulüpler :"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine(Satir); } Console.ReadLine(); Select ve isimsiz Tip (Anonymous Types) Kullanımı 1 Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci ad ve soyadlarından yeni bir isimsiz tip oluşturarak seçer. var Ogrenciler = OgrencileriGetir(); var BuyukHarfIsimler = from Ogrenci in Ogrenciler select new { Ad = Ogrenci.Adi.ToUpper(), Soyad = Ogrenci.Soyadi.ToUpper() }; Console.WriteLine("Büyük harflerle öğrenci isimleri :"); foreach (var BuyukHarfIsim in BuyukHarfIsimler) { Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır: Büyük harflerle öğrenci isimleri : TUNCAY ÇAĞRI JALE İKİNCİ TEKİN UĞURLU MESUT BAHTİYAR VELİ CANLI AHMET GEÇE FATMA TEYZE MEHMET EMRE HALE BİRİNCİ AYŞE HANIM CEVDET DÖĞER NURİ BABAYİĞİT KENAN ORAN LALE ÜÇÜNCÜ ERHAN ERKANLI ERHAN FİDAN ERHAN ÇELİK Daha önceki örneklerimizde görüldüğü gibi, foreach döngüsü içinde döngü sırasında seçilecek elemanın tipini bildirmek için var kulandık. Var ifadesi kolaylık olsun diye, elemanın tipi ile uğraşmamak için kullanıldı. Var ile tanımlamak yerine elemanın tipi de verilebilirdi. Örneğin Basit Where Örneği 1 'de kullandığımız örneği (özellikle foreach bölümününe dikkat edin) var ifadelerini çıkarıp aşağıdaki gibi de yazabilirdik. int[] Rakamlar = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; IEnumerable<int> KucukRakamlar = from Rakam in Rakamlar where Rakam < 5 select Rakam; Console.WriteLine("5'den küçük rakamlar..."); foreach (int Rakam in KucukRakamlar) { Console.WriteLine(Rakam); } Console.ReadLine(); Anonim tiplerde ise tipin bir adı olmadığından mecburen var kullanırız. Anonim tiplerin isimleri derleme zamanında derleyici tarafından belirlenir. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var BuyukHarfIsimler = Ogrenciler.Select(Ogrenci => new { Ad = Ogrenci.Adi.ToUpper(), Soyad = Ogrenci.Soyadi.ToUpper() }); Console.WriteLine("Büyük harflerle öğrenci isimleri :"); foreach (var BuyukHarfIsim in BuyukHarfIsimler) { Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad); } Console.ReadLine(); Select ve isimsiz Tip (Anonymous Types) Kullanımı 2 Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından öğrenci adları ve üye oldukları kulüplerin adlarını kullanarak daha önceki örnekten bir parça daha karmaşık bir isimsiz tip oluşturarak seçer. var Ogrenciler = OgrencileriGetir(); List<KulupKaydi> Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => new { Adi = Ogrenci.Adi, Kulubu = Kulupler[Ogrenci.Kulup].Adi, TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır" }); Console.WriteLine("Öğrenciler ve kulüpleri:"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}", Satir.Adi, Satir.Kulubu, Satir.TiyatroMu); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenciler ve kulüpleri: Adı : Tuncay, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Jale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Tekin, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Mesut, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Veli, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Ahmet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Fatma, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Mehmet, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Hale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Ayşe, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Cevdet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Nuri, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Kenan, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Lale, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => new { Adi = Ogrenci.Adi, Kulubu = Kulupler[Ogrenci.Kulup].Adi, TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır" }); Console.WriteLine("Öğrenciler ve kulüpleri:"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}", Satir.Adi, Satir.Kulubu, Satir.TiyatroMu); } Console.ReadLine(); Select ve İsimsiz Tip (Anonymous Types) Kullanımı 3 Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci kayıtlarından öğrenci adı, sınıfı ve başarı durumunu özelliklerinden yeni bir isimsiz tip oluşturur ve seçer. Daha sonra bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrenciOzetBilgileri = from Ogrenci in Ogrenciler select new { Ogrenci.Adi, Ogrenci.Sinif, BasariliMi = Ogrenci.Basarili }; Console.WriteLine("Öğrenci başarı durumları :"); foreach (var OzetBilgi in OgrenciOzetBilgileri) { Console.WriteLine("{0}, {1}. sınıfta ve {2}.", OzetBilgi.Adi, OzetBilgi.Sinif, OzetBilgi.BasariliMi ? "başarılı" : "başarısız"); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenci başarı durumları : Tuncay, 4. sınıfta ve başarılı. Jale, 3. sınıfta ve başarılı. Tekin, 1. sınıfta ve başarısız. Mesut, 4. sınıfta ve başarısız. Veli, 4. sınıfta ve başarısız. Ahmet, 2. sınıfta ve başarılı. Fatma, 3. sınıfta ve başarılı. Mehmet, 4. sınıfta ve başarılı. Hale, 2. sınıfta ve başarısız. Ayşe, 2. sınıfta ve başarılı. Cevdet, 3. sınıfta ve başarısız. Nuri, 2. sınıfta ve başarılı. Kenan, 1. sınıfta ve başarılı. Lale, 3. sınıfta ve başarısız. Erhan, 1. sınıfta ve başarılı. Erhan, 2. sınıfta ve başarılı. Erhan, 3. sınıfta ve başarılı. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var OgrenciOzetBilgileri = Ogrenciler.Select(Ogrenci => new { Ogrenci.Adi, Ogrenci.Sinif, BasariliMi = Ogrenci.Basarili }); Console.WriteLine("Öğrenci başarı durumları :"); foreach (var OzetBilgi in OgrenciOzetBilgileri) { Console.WriteLine("{0}, {1}. sınıfta ve {2}.", OzetBilgi.Adi, OzetBilgi.Sinif, OzetBilgi.BasariliMi ? "başarılı" : "başarısız"); } Console.ReadLine(); Dizinli / indeksli (Indexed) Select Kullanımı Select yönteminin 2. kullanım şeklinde, yöntem o anda bulunduğu eleman ile elemanın 0 tabanlı sıra numarasını (index) Lambda İfadesi olarak yazılabilecek bir isimsiz fonksiyona gönderir. Bu isimsiz fonksiyonda elemanın kensini ve sıra numarası ile ilgili işlemleri yaparız. Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci kayıtlarından öğrencinin listedeki sırası, numarası, adı ve soyadı verilerinden yeni bir isimsiz tip oluşturur ve seçer. Daha sonra bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrenciListesi = Ogrenciler.Select((Ogrenci, Index) => new { Sirasi = Index + 1, Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi }); Console.WriteLine("Öğrenci listesi :"); foreach (var ListeSatiri in OgrenciListesi) { Console.WriteLine("{0}- {1} {2} {3}", ListeSatiri.Sirasi, ListeSatiri.No, ListeSatiri.Adi, ListeSatiri.Soyadi); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenci listesi : 1- 2 Tuncay Çağrı 2- 4 Jale İkinci 3- 7 Tekin Uğurlu 4- 8 Mesut Bahtiyar 5- 12 Veli Canlı 6- 6 Ahmet Geçe 7- 15 Fatma Teyze 8- 14 Mehmet Emre 9- 3 Hale Birinci 10- 13 Ayşe Hanım 11- 11 Cevdet Döğer 12- 1 Nuri Babayiğit 13- 5 Kenan Oran 14- 9 Lale Üçüncü 15- 10 Erhan Erkanlı 16- 16 Erhan Fidan 17- 17 Erhan Çelik Dizinli SELECT yöntemi Func<T1, T2, TResult>(T1 arg1, T2 arg2) delegesi ile temsil edilen ve Lambda İfadesi şeklinde yazdığımız bir isimsiz fonksiyon kullanır. Bu isimsiz fonksiyona 2 parametre geçer. 1. parametre o anda sayılan elemanın kendisi, 2. parametre olarak da elemanın sırası 0 tabanlı olarak (ilk elemanın numarası 0) döndürülür. Biz de elemanın kendisini ve sırasını kullanarak isimsiz fonksiyon içinde işlemler gerçekleştirebiliriz. Şimdiye kadarki örneklerimizde SELECT yöntemine Func<T1, TResult>(T1 arg1) ile temsil edilen, tek parametreli bir lambda ifadesi, örneğin Ogrenci => Ogrenci.Basarili kullanmıştık. Select Filtre Kullanımı (Select Filtered) Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından WHERE cümleciği ile filtre uygulayarak 3. sınıf öğrencilerinin adları ve bu öğrencilerin çalıştıkları kulüp bilgisinden bir isimsiz tip oluşturarak seçer ve bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var Sinif3Kulupleri = from Ogrenci in Ogrenciler where Ogrenci.Sinif == 3 select new { Ogrenci.Adi, Kulup = Kulupler[Ogrenci.Kulup].Adi }; Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :"); foreach (var Satir in Sinif3Kulupleri) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 3. sınıf öğrencilerinin üye olduğu kulüpler : Jale, Tiyatro kulübüne üye. Fatma, Tiyatro kulübüne üye. Cevdet, Müzik kulübüne üye. Lale, Gezi kulübüne üye. Erhan, Tiyatro kulübüne üye. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var Sinif3Kulupleri = Ogrenciler.Where(Ogrenci => Ogrenci.Sinif == 3) .Select(Ogrenci => new { Ogrenci.Adi, Kulup = Kulupler[Ogrenci.Kulup].Adi } ); Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :"); foreach (var Satir in Sinif3Kulupleri) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup); } Console.ReadLine(); 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 (Bu makale) LINQ - Yansıtma (Projection) - SelectMany Kullanım Örnekleri LINQ - Bölümleme (Partitioning) Örnekleri LINQ - Sıralama (Ordering) Örnekleri 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 17:17
LINQ - Yansıtma (Projection) - Select Kullanım Örnekleri
Bu makalede kullanılan veri kaynağını görmek için tıklayın . Basit Select Kullanımı 1 LINQ sorgularında çoğunlukla bitiş
olarak görülen SELECT cümleciği ile o anda sayılan eleman bildirilirse
bu eleman seçilir. Ancak aşağıdaki örnekteki gibi oluşturulacak yeni
listede kullanılmak üzere elemanın kendisi değil bir özelliği de
seçilebilir ve yeni liste (örneğimizde OgrenciSoyadlari) bu değerlerden
oluşur. İleride göreceğimiz gibi SELECT bazen çok farklı bir isimsiz
sınıf oluşturup onu da seçebilir. Bu örnek öğrenci bilgilerini içeren bir veri kaynağından öğrencilerin soyadlarını seçer. var Ogrenciler = OgrencileriGetir(); var OgrenciSoyadlari = from Ogrenci in Ogrenciler select Ogrenci.Soyadi; Console.WriteLine("Öğrencilerin soyadları :"); foreach (var Soyad in OgrenciSoyadlari) { Console.WriteLine(Soyad); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 1. Sınıftaki Başarılı öğrenciler... Oran, Kenan Erkanlı, Erhan Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var OgrenciSoyadlari = Ogrenciler.Select(Ogrenci => Ogrenci.Soyadi); Console.WriteLine("Öğrencilerin soyadları :"); foreach (var Soyad in OgrenciSoyadlari) { Console.WriteLine(Soyad); } Console.ReadLine(); Basit Select Kullanımı 2 Bu örnek, bir tamsayılar dizisindeki elemanların 1 fazlalarını seçer. int[] Sayilar = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var SayilarArtiBir = from Sayi in Sayilar select Sayi + 1; Console.WriteLine("Sayılar + 1:"); foreach (var i in SayilarArtiBir) { Console.WriteLine(i); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Sayılar + 1: 6 5 2 4 10 9 7 8 3 1 Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: int[] Sayilar = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; var SayilarArtiBir = Sayilar.Select(Sayi => Sayi + 1); Console.WriteLine("Sayılar + 1:"); foreach (var i in SayilarArtiBir) { Console.WriteLine(i); } Console.ReadLine(); Select Dönüştürme (Transformation) Bu örnek öğrenci bilgilerini içeren bir veri kaynağından ve öğrenci kuluplerinin bilgilerini içeren ikinci bir veri kaynağından öğrencilerin adlarını ve kulüplerin adlarını seçerek öğrencilerin adları ve üye oldukları kulüplerin adlarından yeni bir liste oluşturur. Öğrenciler veri kaynağındaki kayıtlarda öğrenci kulüpleri, kulüp veri kaynağındaki kulübün sıra numarası ve aynı zamanda kayıt numarası olan bir numara ile belirlenmiştir. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = from Ogrenci in Ogrenciler select Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi; Console.WriteLine("Öğrencilerin üye olduğu kulüpler :"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine(Satir); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrencilerin üye olduğu kulüpler : Tuncay: Gezi Jale: Tiyatro Tekin: Tiyatro Mesut: Tiyatro Veli: Müzik Ahmet: Müzik Fatma: Tiyatro Mehmet: Gezi Hale: Tiyatro Ayşe: Tiyatro Cevdet: Müzik Nuri: Müzik Kenan: Gezi Lale: Gezi Erhan: Tiyatro Erhan: Tiyatro Erhan: Tiyatro Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => Ogrenci.Adi + ": " + Kulupler[Ogrenci.Kulup].Adi); Console.WriteLine("Öğrencilerin üye olduğu kulüpler :"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine(Satir); } Console.ReadLine(); Select ve isimsiz Tip (Anonymous Types) Kullanımı 1 Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci ad ve soyadlarından yeni bir isimsiz tip oluşturarak seçer. var Ogrenciler = OgrencileriGetir(); var BuyukHarfIsimler = from Ogrenci in Ogrenciler select new { Ad = Ogrenci.Adi.ToUpper(), Soyad = Ogrenci.Soyadi.ToUpper() }; Console.WriteLine("Büyük harflerle öğrenci isimleri :"); foreach (var BuyukHarfIsim in BuyukHarfIsimler) { Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır: Büyük harflerle öğrenci isimleri : TUNCAY ÇAĞRI JALE İKİNCİ TEKİN UĞURLU MESUT BAHTİYAR VELİ CANLI AHMET GEÇE FATMA TEYZE MEHMET EMRE HALE BİRİNCİ AYŞE HANIM CEVDET DÖĞER NURİ BABAYİĞİT KENAN ORAN LALE ÜÇÜNCÜ ERHAN ERKANLI ERHAN FİDAN ERHAN ÇELİK Daha önceki örneklerimizde görüldüğü gibi, foreach döngüsü içinde döngü sırasında seçilecek elemanın tipini bildirmek için var kulandık. Var ifadesi kolaylık olsun diye, elemanın tipi ile uğraşmamak için kullanıldı. Var ile tanımlamak yerine elemanın tipi de verilebilirdi. Örneğin Basit Where Örneği 1 'de kullandığımız örneği (özellikle foreach bölümününe dikkat edin) var ifadelerini çıkarıp aşağıdaki gibi de yazabilirdik. int[] Rakamlar = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; IEnumerable<int> KucukRakamlar = from Rakam in Rakamlar where Rakam < 5 select Rakam; Console.WriteLine("5'den küçük rakamlar..."); foreach (int Rakam in KucukRakamlar) { Console.WriteLine(Rakam); } Console.ReadLine(); Anonim tiplerde ise tipin bir adı olmadığından mecburen var kullanırız. Anonim tiplerin isimleri derleme zamanında derleyici tarafından belirlenir. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var BuyukHarfIsimler = Ogrenciler.Select(Ogrenci => new { Ad = Ogrenci.Adi.ToUpper(), Soyad = Ogrenci.Soyadi.ToUpper() }); Console.WriteLine("Büyük harflerle öğrenci isimleri :"); foreach (var BuyukHarfIsim in BuyukHarfIsimler) { Console.WriteLine("{0} {1}", BuyukHarfIsim.Ad, BuyukHarfIsim.Soyad); } Console.ReadLine(); Select ve isimsiz Tip (Anonymous Types) Kullanımı 2 Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından öğrenci adları ve üye oldukları kulüplerin adlarını kullanarak daha önceki örnekten bir parça daha karmaşık bir isimsiz tip oluşturarak seçer. var Ogrenciler = OgrencileriGetir(); List<KulupKaydi> Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => new { Adi = Ogrenci.Adi, Kulubu = Kulupler[Ogrenci.Kulup].Adi, TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır" }); Console.WriteLine("Öğrenciler ve kulüpleri:"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}", Satir.Adi, Satir.Kulubu, Satir.TiyatroMu); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenciler ve kulüpleri: Adı : Tuncay, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Jale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Tekin, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Mesut, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Veli, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Ahmet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Fatma, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Mehmet, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Hale, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Ayşe, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Cevdet, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Nuri, Kulübü : Müzik, Tiyatro Kulübünde : Hayır Adı : Kenan, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Lale, Kulübü : Gezi, Tiyatro Kulübünde : Hayır Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Adı : Erhan, Kulübü : Tiyatro, Tiyatro Kulübünde : Evet Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var OgrencilerVeKulupleri = Ogrenciler.Select(Ogrenci => new { Adi = Ogrenci.Adi, Kulubu = Kulupler[Ogrenci.Kulup].Adi, TiyatroMu = Ogrenci.Kulup == 1 ? "Evet" : "Hayır" }); Console.WriteLine("Öğrenciler ve kulüpleri:"); foreach (var Satir in OgrencilerVeKulupleri) { Console.WriteLine("Adı : {0}, Kulübü : {1}, Tiyatro Kulübünde : {2}", Satir.Adi, Satir.Kulubu, Satir.TiyatroMu); } Console.ReadLine(); Select ve İsimsiz Tip (Anonymous Types) Kullanımı 3 Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci kayıtlarından öğrenci adı, sınıfı ve başarı durumunu özelliklerinden yeni bir isimsiz tip oluşturur ve seçer. Daha sonra bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrenciOzetBilgileri = from Ogrenci in Ogrenciler select new { Ogrenci.Adi, Ogrenci.Sinif, BasariliMi = Ogrenci.Basarili }; Console.WriteLine("Öğrenci başarı durumları :"); foreach (var OzetBilgi in OgrenciOzetBilgileri) { Console.WriteLine("{0}, {1}. sınıfta ve {2}.", OzetBilgi.Adi, OzetBilgi.Sinif, OzetBilgi.BasariliMi ? "başarılı" : "başarısız"); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenci başarı durumları : Tuncay, 4. sınıfta ve başarılı. Jale, 3. sınıfta ve başarılı. Tekin, 1. sınıfta ve başarısız. Mesut, 4. sınıfta ve başarısız. Veli, 4. sınıfta ve başarısız. Ahmet, 2. sınıfta ve başarılı. Fatma, 3. sınıfta ve başarılı. Mehmet, 4. sınıfta ve başarılı. Hale, 2. sınıfta ve başarısız. Ayşe, 2. sınıfta ve başarılı. Cevdet, 3. sınıfta ve başarısız. Nuri, 2. sınıfta ve başarılı. Kenan, 1. sınıfta ve başarılı. Lale, 3. sınıfta ve başarısız. Erhan, 1. sınıfta ve başarılı. Erhan, 2. sınıfta ve başarılı. Erhan, 3. sınıfta ve başarılı. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var OgrenciOzetBilgileri = Ogrenciler.Select(Ogrenci => new { Ogrenci.Adi, Ogrenci.Sinif, BasariliMi = Ogrenci.Basarili }); Console.WriteLine("Öğrenci başarı durumları :"); foreach (var OzetBilgi in OgrenciOzetBilgileri) { Console.WriteLine("{0}, {1}. sınıfta ve {2}.", OzetBilgi.Adi, OzetBilgi.Sinif, OzetBilgi.BasariliMi ? "başarılı" : "başarısız"); } Console.ReadLine(); Dizinli / indeksli (Indexed) Select Kullanımı Select yönteminin 2. kullanım şeklinde, yöntem o anda bulunduğu eleman ile elemanın 0 tabanlı sıra numarasını (index) Lambda İfadesi olarak yazılabilecek bir isimsiz fonksiyona gönderir. Bu isimsiz fonksiyonda elemanın kensini ve sıra numarası ile ilgili işlemleri yaparız. Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrenci kayıtlarından öğrencinin listedeki sırası, numarası, adı ve soyadı verilerinden yeni bir isimsiz tip oluşturur ve seçer. Daha sonra bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrenciListesi = Ogrenciler.Select((Ogrenci, Index) => new { Sirasi = Index + 1, Ogrenci.No, Ogrenci.Adi, Ogrenci.Soyadi }); Console.WriteLine("Öğrenci listesi :"); foreach (var ListeSatiri in OgrenciListesi) { Console.WriteLine("{0}- {1} {2} {3}", ListeSatiri.Sirasi, ListeSatiri.No, ListeSatiri.Adi, ListeSatiri.Soyadi); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenci listesi : 1- 2 Tuncay Çağrı 2- 4 Jale İkinci 3- 7 Tekin Uğurlu 4- 8 Mesut Bahtiyar 5- 12 Veli Canlı 6- 6 Ahmet Geçe 7- 15 Fatma Teyze 8- 14 Mehmet Emre 9- 3 Hale Birinci 10- 13 Ayşe Hanım 11- 11 Cevdet Döğer 12- 1 Nuri Babayiğit 13- 5 Kenan Oran 14- 9 Lale Üçüncü 15- 10 Erhan Erkanlı 16- 16 Erhan Fidan 17- 17 Erhan Çelik Dizinli SELECT yöntemi Func<T1, T2, TResult>(T1 arg1, T2 arg2) delegesi ile temsil edilen ve Lambda İfadesi şeklinde yazdığımız bir isimsiz fonksiyon kullanır. Bu isimsiz fonksiyona 2 parametre geçer. 1. parametre o anda sayılan elemanın kendisi, 2. parametre olarak da elemanın sırası 0 tabanlı olarak (ilk elemanın numarası 0) döndürülür. Biz de elemanın kendisini ve sırasını kullanarak isimsiz fonksiyon içinde işlemler gerçekleştirebiliriz. Şimdiye kadarki örneklerimizde SELECT yöntemine Func<T1, TResult>(T1 arg1) ile temsil edilen, tek parametreli bir lambda ifadesi, örneğin Ogrenci => Ogrenci.Basarili kullanmıştık. Select Filtre Kullanımı (Select Filtered) Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından WHERE cümleciği ile filtre uygulayarak 3. sınıf öğrencilerinin adları ve bu öğrencilerin çalıştıkları kulüp bilgisinden bir isimsiz tip oluşturarak seçer ve bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var Sinif3Kulupleri = from Ogrenci in Ogrenciler where Ogrenci.Sinif == 3 select new { Ogrenci.Adi, Kulup = Kulupler[Ogrenci.Kulup].Adi }; Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :"); foreach (var Satir in Sinif3Kulupleri) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 3. sınıf öğrencilerinin üye olduğu kulüpler : Jale, Tiyatro kulübüne üye. Fatma, Tiyatro kulübüne üye. Cevdet, Müzik kulübüne üye. Lale, Gezi kulübüne üye. Erhan, Tiyatro kulübüne üye. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var Sinif3Kulupleri = Ogrenciler.Where(Ogrenci => Ogrenci.Sinif == 3) .Select(Ogrenci => new { Ogrenci.Adi, Kulup = Kulupler[Ogrenci.Kulup].Adi } ); Console.WriteLine("3. sınıf öğrencilerinin üye olduğu kulüpler :"); foreach (var Satir in Sinif3Kulupleri) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.Kulup); } Console.ReadLine();
Ekleyen: canora