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