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