20.06.16 21:18
LINQ - Yansıtma (Projection) - SelectMany Kullanım Örnekleri
Bu makalede kullanılan veri kaynağını görmek için tıklayın . Bir LINQ sorgusunda 2 farklı veri kaynağından seçilen kayıtlar
(satırlar) ortak bir alana göre birleştirilerek tek bir kayıt elde
edilebilir. Bunun için from cümleciği yardımıyla seçilecek veri
kaynakları ayrı ayrı bildirilebilir. Ayrıca where cümleciğinde bu veri
kaynaklarındaki kayıtların birleştirilmesi için kullanılacak ortak
değer belirtilerek, uygun kayıtlardan yeni kayıtlar oluşturularak
seçilir. Bu işlem LINQ Yöntem Sözdizimi (LINQ Method Syntax)'nde SelectMany yöntemi aracılığıyla yapılır ve SQL Join cümleciğine karşılık
gelir. SelectMany Birleşik From (SelectMany Compound From) Örneği 1 Bu
örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri
bilgilerini içeren ikinci bir veri kaynağından, kulüp kayıt numarası
üzerinden birleştirme yaparak öğrenci adı ve kulüp adı verilerinden yeni
bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya
yazar. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var UyeOlunanKulupler = from Ogrenci in Ogrenciler from Kulup in Kulupler where Kulup.KayitNo == Ogrenci.Kulup select new { Ogrenci.Adi, KulupAdi = Kulup.Adi }; Console.WriteLine("Öğrenciler ve kulüpleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır :
Öğrenciler ve kulüpleri : Tuncay, Gezi kulübüne üye. Jale, Tiyatro kulübüne üye. Tekin, Tiyatro kulübüne üye. Mesut, Tiyatro kulübüne üye. Veli, Müzik kulübüne üye. Ahmet, Müzik kulübüne üye. Fatma, Tiyatro kulübüne üye. Mehmet, Gezi kulübüne üye. Hale, Tiyatro kulübüne üye. Ayşe, Tiyatro kulübüne üye. Cevdet, Müzik kulübüne üye. Nuri, Müzik kulübüne üye. Kenan, Gezi kulübüne üye. Lale, Gezi kulübüne üye. Erhan, Tiyatro kulübüne üye. Erhan, Tiyatro 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 UyeOlunanKulupler = Ogrenciler.SelectMany(Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup) , (Ogrenci, Kulup) => new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ); Console.WriteLine("Öğrenciler ve kulupleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ), ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. Bu örnekte new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ifadesinde birinci özelliğin adı belirtilmemiştir. Yani isimsiz tip new { Adi = Ogrenci.Adi, KulupAdi = Kulup.Adi } şeklinde yazılmamıştır. Böyle bir durumda özellik adı olarak seçilen özelliğin adı (örneğimizde Ogrenci.Adi bölümündeki Adi ) kullanılacaktır. SelectMany Birleşik From (SelectMany Compound From) Örneği 2 Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından, bir önceki örnekten bir parça daha karmaşık bir where cümleciği kullanarak pekiyi alan öğrencileri ve kulup adlarınından yeni bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. Görüldüğü gibi bir where cümleciğinde mantıksal karşılaştırma operatörleri (and, or vb.) kullanılarak farklı durumlara göre birleştirmeler yapılabilir. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var UyeOlunanKulupler = from Ogrenci in Ogrenciler from Kulup in Kulupler where Ogrenci.Ortalama >= 85 && Kulup.KayitNo == Ogrenci.Kulup select new { Ogrenci.Adi, KulupAdi = Kulup.Adi }; Console.WriteLine("Ortalaması pekiyi olan öğrenciler ve kulüpleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Ortalaması pekiyi olan öğrenciler ve kulüpleri : Jale, Tiyatro kulübüne üye. Fatma, Tiyatro kulübüne üye. Erhan, Tiyatro 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 UyeOlunanKulupler = Ogrenciler.SelectMany(Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup && Ogrenci.Ortalama >= 85 ) , (Ogrenci, Kulup) => new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ); Console.WriteLine("Ortalaması pekiyi olan öğrenciler ve kulüpleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. SelectMany Birleşik From (SelectMany Compound From) Örneği 3 Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından, bir önceki örnekten bir parça daha karmaşık bir where cümleciği kullanarak 1.1.1990 ve daha büyük doğumluların ad, doğum yılı ve üye olduğu kulüp adındanyeni bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. Görüldüğü gibi bir where cümleciğinde mantıksal karşılaştırma operatörleri (and, or vb.) kullanılarak farklı durumlara göre birleştirmeler yapılabilir. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var GenclerinKulupleri = from Ogrenci in Ogrenciler from Kulup in Kulupler where Ogrenci.DogumTarihi >= new DateTime(1990, 1, 1) && Kulup.KayitNo == Ogrenci.Kulup select new { Ogrenci.Adi, DogumYili = Ogrenci.DogumTarihi.Year, KulupAdi = Kulup.Adi }; Console.WriteLine("1.1.1990 ve daha sonra doğan öğrencilerin kulupleri :"); foreach (var Satir in GenclerinKulupleri) { Console.WriteLine("{0}, {1} kulübüne üye. Doğum yılı {2}.", Satir.Adi, Satir.KulupAdi, Satir.DogumYili); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 1.1.1990 ve daha sonra doğan öğrencilerin kulupleri : Tuncay, Gezi kulübüne üye. Doğum yılı 2002. Veli, Müzik kulübüne üye. Doğum yılı 1993. Nuri, Müzik kulübüne üye. Doğum yılı 1998. Lale, Gezi kulübüne üye. Doğum yılı 1990. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var GenclerinKulupleri = Ogrenciler.SelectMany( Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup && Ogrenci.DogumTarihi >= new DateTime(1900, 1, 1) ) , (Ogrenci, Kulup) => new { Ogrenci.Adi, DogumYili = Ogrenci.DogumTarihi.Year, KulupAdi = Kulup.Adi } ); Console.WriteLine("1.1.1990 ve daha sonra doğan öğrencilerin kulupleri :"); foreach (var Satir in GenclerinKulupleri) { Console.WriteLine("{0}, {1} kulübüne üye. Doğum yılı {2}.", Satir.Adi, Satir.KulupAdi, Satir.DogumYili); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. SelectMany From Ataması (SelectMany From Assignment) Örneği Bir LINQ sorgusunda ikinci bir from kullanarak veri kaynağı içinden ikinci bir veri kaynağı kullanabiliriz. Bu örnek öğrenci bilgilerini içeren bir veri kaynağından öğrencilerin adları ve pekiyi notlarından bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrencilerVePekiyiNotlari = from Ogrenci in Ogrenciler from Notu in Ogrenci.Notlar where Notu >= 85 select new { Ogrenci.Adi, PekiyiNotu = Notu }; Console.WriteLine("Öğrenciler aldığı pekiyi notları :"); foreach (var OgrenciVePekiyiNotu in OgrencilerVePekiyiNotlari) { Console.WriteLine("{0}, {1}", OgrenciVePekiyiNotu.Adi, OgrenciVePekiyiNotu.PekiyiNotu); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenciler aldığı pekiyi notları : Jale, 100 Jale, 95 Jale, 97 Jale, 96 Fatma, 98 Fatma, 97 Fatma, 92 Mehmet, 97 Ayşe, 100 Ayşe, 100 Erhan, 90 Erhan, 90 Erhan, 90 Erhan, 90 Erhan, 95 Erhan, 100 Erhan, 90 Erhan, 90 Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var OgrencilerVePekiyiNotlari = Ogrenciler.SelectMany(Ogrenci => Ogrenci.Notlar.Where(Notu => Notu >= 85) , (Ogrenci, Notu) => new { Ogrenci.Adi, PekiyiNotu = Notu } ); Console.WriteLine("Öğrenciler aldığı pekiyi notları :"); foreach (var OgrenciVePekiyiNotu in OgrencilerVePekiyiNotlari) { Console.WriteLine("{0}, {1}", OgrenciVePekiyiNotu.Adi, OgrenciVePekiyiNotu.PekiyiNotu); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. SelectMany Çoklu From (SelectMany Multiple From) Örneği Bir LINQ sorgusunda çoklu from kullanımından başka, from ve where kullanan alt sorgular ile seçimler yapılarak bir sorgu oluşturulabilir. Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki 4. sınıf öğrencilerinin aldığı zayıf notlarla öğrenci adlarından bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); int GecerNot = 55; var DorduncuSiniflarinZayiflari = from Ogrenci in Ogrenciler where Ogrenci.Sinif == 4 from Notu in Ogrenci.Notlar where Notu < GecerNot select new { Ogrenci.Adi, ZayifNotu = Notu }; Console.WriteLine("4. sınıf öğrencilerin aldığı zayıf notlar:"); foreach (var Satir in DorduncuSiniflarinZayiflari) { Console.WriteLine("{0}, {1}.", Satir.Adi, Satir.ZayifNotu); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 4. sınıf öğrencilerin aldığı zayıf notlar: Mesut, 10. Mesut, 30. Veli, 40. Veli, 10. Mehmet, 22. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); int GecerNot = 55; var DorduncuSiniflarinZayiflari = Ogrenciler.Where(Ogrenci => Ogrenci.Sinif == 4) .SelectMany(Ogrenci => Ogrenci.Notlar.Where(Notu => Notu < GecerNot) , (Ogrenci, Notu) => new { Ogrenci.Adi, ZayifNotu = Notu } ); Console.WriteLine("4. sınıf öğrencilerin aldığı zayıf notlar:"); foreach (var Satir in DorduncuSiniflarinZayiflari) { Console.WriteLine("{0}, {1}.", Satir.Adi, Satir.ZayifNotu); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. Dizinli SelectMany (SelectMany Indexed) Örneği SelectMany metodu sıradaki elemanın sıra numarasını (index) döndüren 2. bir kullanıma sahiptir. Bu şekilde elamanın sıra numarası ile ilgili yapılacak işlemler gerçekleştirilebilir. Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencilerin kayıt sıraları ve notlarından bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrencilerinTumNotlari = Ogrenciler.SelectMany( (Ogrenci, Index) => Ogrenci.Notlar.Select(Notu => new { Sira = (Index + 1), Not = Notu } ) ); Console.WriteLine("Öğrencilerinin kayıt sırasına göre notları :"); foreach (var Satir in OgrencilerinTumNotlari) { Console.WriteLine("{0}. sıradaki öğrencimizin bir notu {1}.", Satir.Sira, Satir.Not); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrencilerinin kayıt sırasına göre notları : 1. sıradaki öğrencimizin bir notu 75. 1. sıradaki öğrencimizin bir notu 70. 1. sıradaki öğrencimizin bir notu 75. 2. sıradaki öğrencimizin bir notu 100. 2. sıradaki öğrencimizin bir notu 95. 2. sıradaki öğrencimizin bir notu 97. 2. sıradaki öğrencimizin bir notu 96. 3. sıradaki öğrencimizin bir notu 30. 3. sıradaki öğrencimizin bir notu 40. 3. sıradaki öğrencimizin bir notu 20. . . . 17. sıradaki öğrencimizin bir notu 90. 17. sıradaki öğrencimizin bir notu 55. 17. sıradaki öğrencimizin bir notu 90. 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 (Bu makale) 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 20:35
LINQ - Yansıtma (Projection) - SelectMany Kullanım Örnekleri
Bu makalede kullanılan veri kaynağını görmek için tıklayın . Bir LINQ sorgusunda 2 farklı veri kaynağından seçilen kayıtlar
(satırlar) ortak bir alana göre birleştirilerek tek bir kayıt elde
edilebilir. Bunun için from cümleciği yardımıyla seçilecek veri
kaynakları ayrı ayrı bildirilebilir. Ayrıca where cümleciğinde bu veri
kaynaklarındaki kayıtların birleştirilmesi için kullanılacak ortak
değer belirtilerek, uygun kayıtlardan yeni kayıtlar oluşturularak
seçilir. Bu işlem LINQ Yöntem Sözdizimi (LINQ Method Syntax)'nde SelectMany yöntemi aracılığıyla yapılır ve SQL Join cümleciğine karşılık
gelir. SelectMany Birleşik From (SelectMany Compound From) Örneği 1 Bu
örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri
bilgilerini içeren ikinci bir veri kaynağından, kulüp kayıt numarası
üzerinden birleştirme yaparak öğrenci adı ve kulüp adı verilerinden yeni
bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya
yazar. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var UyeOlunanKulupler = from Ogrenci in Ogrenciler from Kulup in Kulupler where Kulup.KayitNo == Ogrenci.Kulup select new { Ogrenci.Adi, KulupAdi = Kulup.Adi }; Console.WriteLine("Öğrenciler ve kulüpleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır :
Öğrenciler ve kulüpleri : Tuncay, Gezi kulübüne üye. Jale, Tiyatro kulübüne üye. Tekin, Tiyatro kulübüne üye. Mesut, Tiyatro kulübüne üye. Veli, Müzik kulübüne üye. Ahmet, Müzik kulübüne üye. Fatma, Tiyatro kulübüne üye. Mehmet, Gezi kulübüne üye. Hale, Tiyatro kulübüne üye. Ayşe, Tiyatro kulübüne üye. Cevdet, Müzik kulübüne üye. Nuri, Müzik kulübüne üye. Kenan, Gezi kulübüne üye. Lale, Gezi kulübüne üye. Erhan, Tiyatro kulübüne üye. Erhan, Tiyatro 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 UyeOlunanKulupler = Ogrenciler.SelectMany(Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup) , (Ogrenci, Kulup) => new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ); Console.WriteLine("Öğrenciler ve kulupleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ), ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. Bu örnekte new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ifadesinde birinci özelliğin adı belirtilmemiştir. Yani isimsiz tip new { Adi = Ogrenci.Adi, KulupAdi = Kulup.Adi } şeklinde yazılmamıştır. Böyle bir durumda özellik adı olarak seçilen özelliğin adı (örneğimizde Ogrenci.Adi bölümündeki Adi ) kullanılacaktır. SelectMany Birleşik From (SelectMany Compound From) Örneği 2 Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından, bir önceki örnekten bir parça daha karmaşık bir where cümleciği kullanarak pekiyi alan öğrencileri ve kulup adlarınından yeni bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. Görüldüğü gibi bir where cümleciğinde mantıksal karşılaştırma operatörleri (and, or vb.) kullanılarak farklı durumlara göre birleştirmeler yapılabilir. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var UyeOlunanKulupler = from Ogrenci in Ogrenciler from Kulup in Kulupler where Ogrenci.Ortalama >= 85 && Kulup.KayitNo == Ogrenci.Kulup select new { Ogrenci.Adi, KulupAdi = Kulup.Adi }; Console.WriteLine("Ortalaması pekiyi olan öğrenciler ve kulüpleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Ortalaması pekiyi olan öğrenciler ve kulüpleri : Jale, Tiyatro kulübüne üye. Fatma, Tiyatro kulübüne üye. Erhan, Tiyatro 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 UyeOlunanKulupler = Ogrenciler.SelectMany(Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup && Ogrenci.Ortalama >= 85 ) , (Ogrenci, Kulup) => new { Ogrenci.Adi, KulupAdi = Kulup.Adi } ); Console.WriteLine("Ortalaması pekiyi olan öğrenciler ve kulüpleri :"); foreach (var Satir in UyeOlunanKulupler) { Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Adi, Satir.KulupAdi); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. SelectMany Birleşik From (SelectMany Compound From) Örneği 3 Bu örnek öğrenci bilgilerini içeren bir veri kaynağı ve öğrenci kulüpleri bilgilerini içeren ikinci bir veri kaynağından, bir önceki örnekten bir parça daha karmaşık bir where cümleciği kullanarak 1.1.1990 ve daha büyük doğumluların ad, doğum yılı ve üye olduğu kulüp adındanyeni bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. Görüldüğü gibi bir where cümleciğinde mantıksal karşılaştırma operatörleri (and, or vb.) kullanılarak farklı durumlara göre birleştirmeler yapılabilir. var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var GenclerinKulupleri = from Ogrenci in Ogrenciler from Kulup in Kulupler where Ogrenci.DogumTarihi >= new DateTime(1990, 1, 1) && Kulup.KayitNo == Ogrenci.Kulup select new { Ogrenci.Adi, DogumYili = Ogrenci.DogumTarihi.Year, KulupAdi = Kulup.Adi }; Console.WriteLine("1.1.1990 ve daha sonra doğan öğrencilerin kulupleri :"); foreach (var Satir in GenclerinKulupleri) { Console.WriteLine("{0}, {1} kulübüne üye. Doğum yılı {2}.", Satir.Adi, Satir.KulupAdi, Satir.DogumYili); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 1.1.1990 ve daha sonra doğan öğrencilerin kulupleri : Tuncay, Gezi kulübüne üye. Doğum yılı 2002. Veli, Müzik kulübüne üye. Doğum yılı 1993. Nuri, Müzik kulübüne üye. Doğum yılı 1998. Lale, Gezi kulübüne üye. Doğum yılı 1990. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); List Kulupler = KulupleriGetir(); var GenclerinKulupleri = Ogrenciler.SelectMany( Ogrenci => Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup && Ogrenci.DogumTarihi >= new DateTime(1900, 1, 1) ) , (Ogrenci, Kulup) => new { Ogrenci.Adi, DogumYili = Ogrenci.DogumTarihi.Year, KulupAdi = Kulup.Adi } ); Console.WriteLine("1.1.1990 ve daha sonra doğan öğrencilerin kulupleri :"); foreach (var Satir in GenclerinKulupleri) { Console.WriteLine("{0}, {1} kulübüne üye. Doğum yılı {2}.", Satir.Adi, Satir.KulupAdi, Satir.DogumYili); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. SelectMany From Ataması (SelectMany From Assignment) Örneği Bir LINQ sorgusunda ikinci bir from kullanarak veri kaynağı içinden ikinci bir veri kaynağı kullanabiliriz. Bu örnek öğrenci bilgilerini içeren bir veri kaynağından öğrencilerin adları ve pekiyi notlarından bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrencilerVePekiyiNotlari = from Ogrenci in Ogrenciler from Notu in Ogrenci.Notlar where Notu >= 85 select new { Ogrenci.Adi, PekiyiNotu = Notu }; Console.WriteLine("Öğrenciler aldığı pekiyi notları :"); foreach (var OgrenciVePekiyiNotu in OgrencilerVePekiyiNotlari) { Console.WriteLine("{0}, {1}", OgrenciVePekiyiNotu.Adi, OgrenciVePekiyiNotu.PekiyiNotu); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrenciler aldığı pekiyi notları : Jale, 100 Jale, 95 Jale, 97 Jale, 96 Fatma, 98 Fatma, 97 Fatma, 92 Mehmet, 97 Ayşe, 100 Ayşe, 100 Erhan, 90 Erhan, 90 Erhan, 90 Erhan, 90 Erhan, 95 Erhan, 100 Erhan, 90 Erhan, 90 Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); var OgrencilerVePekiyiNotlari = Ogrenciler.SelectMany(Ogrenci => Ogrenci.Notlar.Where(Notu => Notu >= 85) , (Ogrenci, Notu) => new { Ogrenci.Adi, PekiyiNotu = Notu } ); Console.WriteLine("Öğrenciler aldığı pekiyi notları :"); foreach (var OgrenciVePekiyiNotu in OgrencilerVePekiyiNotlari) { Console.WriteLine("{0}, {1}", OgrenciVePekiyiNotu.Adi, OgrenciVePekiyiNotu.PekiyiNotu); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. SelectMany Çoklu From (SelectMany Multiple From) Örneği Bir LINQ sorgusunda çoklu from kullanımından başka, from ve where kullanan alt sorgular ile seçimler yapılarak bir sorgu oluşturulabilir. Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki 4. sınıf öğrencilerinin aldığı zayıf notlarla öğrenci adlarından bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); int GecerNot = 55; var DorduncuSiniflarinZayiflari = from Ogrenci in Ogrenciler where Ogrenci.Sinif == 4 from Notu in Ogrenci.Notlar where Notu < GecerNot select new { Ogrenci.Adi, ZayifNotu = Notu }; Console.WriteLine("4. sınıf öğrencilerin aldığı zayıf notlar:"); foreach (var Satir in DorduncuSiniflarinZayiflari) { Console.WriteLine("{0}, {1}.", Satir.Adi, Satir.ZayifNotu); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : 4. sınıf öğrencilerin aldığı zayıf notlar: Mesut, 10. Mesut, 30. Veli, 40. Veli, 10. Mehmet, 22. Aynı örnek, LINQ Yöntem Sözdizimi (LINQ Method Syntax) ile şu şekilde yazılabilir: var Ogrenciler = OgrencileriGetir(); int GecerNot = 55; var DorduncuSiniflarinZayiflari = Ogrenciler.Where(Ogrenci => Ogrenci.Sinif == 4) .SelectMany(Ogrenci => Ogrenci.Notlar.Where(Notu => Notu < GecerNot) , (Ogrenci, Notu) => new { Ogrenci.Adi, ZayifNotu = Notu } ); Console.WriteLine("4. sınıf öğrencilerin aldığı zayıf notlar:"); foreach (var Satir in DorduncuSiniflarinZayiflari) { Console.WriteLine("{0}, {1}.", Satir.Adi, Satir.ZayifNotu); } Console.ReadLine(); SelectMany yönteminin aldığı 2 parametreden birincisi, SelectMany uygulanan veri kaynağının (örneğimizde Ogrenciler ) hangi veri kaynağı ile hangi ortak alan üzerinden birleştirileceğini (örneğimizide Kulup.KayitNo ve Ogrenci.Kulup ) ve diğer şartları, ikincisi nelerin seçileceğini (örneğimizde öğrenci adı ve kulüp adı) belirler. Dizinli SelectMany (SelectMany Indexed) Örneği SelectMany metodu sıradaki elemanın sıra numarasını (index) döndüren 2. bir kullanıma sahiptir. Bu şekilde elamanın sıra numarası ile ilgili yapılacak işlemler gerçekleştirilebilir. Bu örnek öğrenci bilgilerini içeren bir veri kaynağındaki öğrencilerin kayıt sıraları ve notlarından bir isimsiz tip oluşturup seçer ve bunu bir foreach döngüsü ile çıktıya yazar. var Ogrenciler = OgrencileriGetir(); var OgrencilerinTumNotlari = Ogrenciler.SelectMany( (Ogrenci, Index) => Ogrenci.Notlar.Select(Notu => new { Sira = (Index + 1), Not = Notu } ) ); Console.WriteLine("Öğrencilerinin kayıt sırasına göre notları :"); foreach (var Satir in OgrencilerinTumNotlari) { Console.WriteLine("{0}. sıradaki öğrencimizin bir notu {1}.", Satir.Sira, Satir.Not); } Console.ReadLine(); Örneğin çıktısı şöyle olacaktır : Öğrencilerinin kayıt sırasına göre notları : 1. sıradaki öğrencimizin bir notu 75. 1. sıradaki öğrencimizin bir notu 70. 1. sıradaki öğrencimizin bir notu 75. 2. sıradaki öğrencimizin bir notu 100. 2. sıradaki öğrencimizin bir notu 95. 2. sıradaki öğrencimizin bir notu 97. 2. sıradaki öğrencimizin bir notu 96. 3. sıradaki öğrencimizin bir notu 30. 3. sıradaki öğrencimizin bir notu 40. 3. sıradaki öğrencimizin bir notu 20. . . . 17. sıradaki öğrencimizin bir notu 90. 17. sıradaki öğrencimizin bir notu 55. 17. sıradaki öğrencimizin bir notu 90.
Ekleyen: canora