Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

LINQ - Birleştirme (Join) İşlemleri

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

Join İle Çapraz Birleştirme (Cross Join) Örneği

Join cümleciği, iki veri kaynağındaki satırları aynı olan bir alan değeri kullanarak birleştirip tek bir liste oluşturmak için kullanılır.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtlar ile öğrenci kulübü bilgilerinden oluşan bir başka veri kaynağını kulüp numarası üzerinden birleştirerek yeni bir isimsiz sınıf listesi oluşturarak yeni listeyi çıktıya yazar.

var Kulupler = KulupleriGetir();

var Ogrenciler = OgrencileriGetir();

var OgrencilerVeKulupSorumlulari =
    from Ogrenci in Ogrenciler
    join Kulup in Kulupler on Ogrenci.Kulup equals Kulup.KayitNo
    select new { OgrenciAdi = Ogrenci.Adi, KulupAdi = Kulup.Adi, KulupSorumlusu = Kulup.Sorumlu };

Console.WriteLine("Öğrenciler ve üye oldukları kulüplerin rehber öğretmenleri :");

foreach (var Nesne in OgrencilerVeKulupSorumlulari)
{
    Console.WriteLine("{0} isimli öğrenci {1} kulübüne üyedir. Kulübün rehber öğretmeni: {2}.",
                      Nesne.OgrenciAdi,
                      Nesne.KulupAdi,
                      Nesne.KulupSorumlusu);
}
Console.ReadLine();

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

Öğrenciler ve üye oldukları kulüplerin rehber öğretmenleri :
Tuncay isimli öğrenci Gezi kulübüne üyedir. Kulübün rehber öğretmeni: Tanju Bülbül.
Jale isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Tekin isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Mesut isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Veli isimli öğrenci Müzik kulübüne üyedir. Kulübün rehber öğretmeni: Nuri Sezer.
Ahmet isimli öğrenci Müzik kulübüne üyedir. Kulübün rehber öğretmeni: Nuri Sezer.
Fatma isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Mehmet isimli öğrenci Gezi kulübüne üyedir. Kulübün rehber öğretmeni: Tanju Bülbül.
Hale isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Ayşe isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Cevdet isimli öğrenci Müzik kulübüne üyedir. Kulübün rehber öğretmeni: Nuri Sezer.
Nuri isimli öğrenci Müzik kulübüne üyedir. Kulübün rehber öğretmeni: Nuri Sezer.
Kenan isimli öğrenci Gezi kulübüne üyedir. Kulübün rehber öğretmeni: Tanju Bülbül.
Lale isimli öğrenci Gezi kulübüne üyedir. Kulübün rehber öğretmeni: Tanju Bülbül.
Erhan isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Erhan isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.
Erhan isimli öğrenci Tiyatro kulübüne üyedir. Kulübün rehber öğretmeni: Metin Öztürk.

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

var Ogrenciler = OgrencileriGetir();

var Kulupler = KulupleriGetir();

var OgrencilerVeKulupSorumlulari =

        Ogrenciler.SelectMany(Ogrenci =>
                                         Kulupler.Where(Kulup => Kulup.KayitNo == Ogrenci.Kulup)
                             ,

                             (Ogrenci, Kulup) =>
                                                  new
                                                  {
                                                      OgrenciAdi = Ogrenci.Adi,
                                                      KulupAdi = Kulup.Adi,
                                                      KulupSorumlusu = Kulup.Sorumlu
                                                  }
                             );

Console.WriteLine("Öğrenciler ve üye oldukları kulüplerin rehber öğretmenleri :");

foreach (var Nesne in OgrencilerVeKulupSorumlulari)
{
    Console.WriteLine("{0} isimli öğrenci {1} kulübüne üyedir. Kulübün rehber öğretmeni: {2}.",
                      Nesne.OgrenciAdi,
                      Nesne.KulupAdi,
                      Nesne.KulupSorumlusu);
}Console.ReadLine(); 

Join İle Birleştirerek Gruplar Oluşturma

Join cümleciği, iki veri kaynağındaki satırları aynı olan bir alan değeri kullanarak birleştirip tek bir liste oluşturmak için kullanılır.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtlar ile öğrenci kulübü bilgilerinden oluşan bir başka veri kaynağını kulüp numarası üzerinden into yardımıyla grup olarak birleştirir. Daha sonra grup bilgilerinden oluşturduğu bir isimsiz sınıf listesini çıktıya yazar.

var Kulupler = KulupleriGetir();

var Ogrenciler = OgrencileriGetir();

var KuluplerVeOgrencileri =
            from Kulup in Kulupler
            join Ogrenci in Ogrenciler on Kulup.KayitNo equals Ogrenci.Kulup into KulupVeOgrencileri
            select new
            {
                KulupVeOgrencileri = KulupVeOgrencileri,
                OgrenciSayisi = KulupVeOgrencileri.Count(),
                KulupAdi = Kulup.Adi
            };

foreach (var Satir in KuluplerVeOgrencileri)
{

    Console.WriteLine("{0} kulübüne üye {1} öğrenci var. Öğrenciler :",
                      Satir.KulupAdi,
                      Satir.OgrenciSayisi);

    foreach (var a in Satir.KulupVeOgrencileri)
    {
        Console.WriteLine(a.Adi);
    }

}
Console.ReadLine();

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

Gezi kulübüne üye 4 öğrenci var. Öğrenciler :
Tuncay
Mehmet
Kenan
Lale
Tiyatro kulübüne üye 9 öğrenci var. Öğrenciler :
Jale
Tekin
Mesut
Fatma
Hale
Ayşe
Erhan
Erhan
Erhan
Müzik kulübüne üye 4 öğrenci var. Öğrenciler :
Veli
Ahmet
Cevdet
Nuri
Kitap kulübüne üye 0 öğrenci var. Öğrenciler :

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

var Kulupler = KulupleriGetir();

var Ogrenciler = OgrencileriGetir();

var KuluplerVeOgrencileri =
            Kulupler.GroupJoin(Ogrenciler,
                               Kulup => Kulup.KayitNo,
                               Ogrenci => Ogrenci.Kulup,
                               (Kulup, KulupVeOgrencileri) => new
                               {
                                   KulupVeOgrencileri = KulupVeOgrencileri,
                                   OgrenciSayisi = KulupVeOgrencileri.Count(),
                                   KulupAdi = Kulup.Adi
                               });

foreach (var Satir in KuluplerVeOgrencileri)
{

    Console.WriteLine("{0} kulübüne üye {1} öğrenci var. Öğrenciler :",
                      Satir.KulupAdi,
                      Satir.OgrenciSayisi);

    foreach (var a in Satir.KulupVeOgrencileri)
    {
        Console.WriteLine(a.Adi);
    }

}Console.ReadLine(); 

Join İle Çapraz Birleştirme (Cross Join) ve Grup Birleştirmesinin Birlikte Kullanımı Örneği

Join cümleciği, iki veri kaynağındaki satırları aynı olan bir alan değeri kullanarak birleştirip tek bir liste oluşturmak için kullanılır.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtlar ile öğrenci kulübü bilgilerinden oluşan bir başka veri kaynağını kulüp numarası üzerinden into yardımıyla grup olarak birleştirir. Daha sonra grup bilgilerinden oluşturduğu bir isimsiz sınıf listesini çıktıya yazar.

var Kulupler = KulupleriGetir();

var Ogrenciler = OgrencileriGetir();

var KuluplerVeOgrencileri =
            from Kulup in Kulupler
            join Ogrenci in Ogrenciler on Kulup.KayitNo equals Ogrenci.Kulup into KulupVeOgrencileri
            select new
            {
                KulupVeOgrencileri = KulupVeOgrencileri,
                OgrenciSayisi = KulupVeOgrencileri.Count(),
                KulupAdi = Kulup.Adi
            };

foreach (var Satir in KuluplerVeOgrencileri)
{

    Console.WriteLine("{0} kulübüne üye {1} öğrenci var. Öğrenciler :",
                      Satir.KulupAdi,
                      Satir.OgrenciSayisi);

    foreach (var a in Satir.KulupVeOgrencileri)
    {
        Console.WriteLine(a.Adi);
    }

}
Console.ReadLine();

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

Gezi kulübüne üye 4 öğrenci var. Öğrenciler :
Tuncay
Mehmet
Kenan
Lale
Tiyatro kulübüne üye 9 öğrenci var. Öğrenciler :
Jale
Tekin
Mesut
Fatma
Hale
Ayşe
Erhan
Erhan
Erhan
Müzik kulübüne üye 4 öğrenci var. Öğrenciler :
Veli
Ahmet
Cevdet
Nuri
Kitap kulübüne üye 0 öğrenci var. Öğrenciler :

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

var Kulupler = KulupleriGetir();

var Ogrenciler = OgrencileriGetir();

var KuluplerVeOgrencileri =
            Kulupler.GroupJoin(Ogrenciler,
                               Kulup => Kulup.KayitNo,
                               Ogrenci => Ogrenci.Kulup,
                               (Kulup, KulupVeOgrencileri) => new
                               {
                                   KulupVeOgrencileri = KulupVeOgrencileri,
                                   OgrenciSayisi = KulupVeOgrencileri.Count(),
                                   KulupAdi = Kulup.Adi
                               });

foreach (var Satir in KuluplerVeOgrencileri)
{

    Console.WriteLine("{0} kulübüne üye {1} öğrenci var. Öğrenciler :",
                      Satir.KulupAdi,
                      Satir.OgrenciSayisi);

    foreach (var a in Satir.KulupVeOgrencileri)
    {
        Console.WriteLine(a.Adi);
    }

}Console.ReadLine(); 

Join İle Hariçte Kalanlar Dahil Birleştirme (Left Outer Join) Örneği

Join cümleciği, iki veri kaynağındaki satırları aynı olan bir alan değeri kullanarak birleştirip tek bir liste oluşturmak için kullanılır. Normal şartlarda bir veri kaynağındaki ortak alan üzerinden birleştirilemeyen (ortak alan değeri bulunmayan) satırlar dışarda kalır. Ancak DefaultIfEmpty metodu ile eşleme bulunamayan satırlar için varsayılan değer kullanılarak bu satırlarda listeye eklenebilir.

Bu örnek öğrenci bilgilerinden oluşan bir veri kaynağındaki kayıtlar ile öğrenci kulübü bilgilerinden oluşan bir başka veri kaynağının elemanlarını kulüp numarası üzerinden birleştirerek oluşturduğu öğrencilerden oluşan kulüp gruplarının elemanlarını çıktıya yazar. Örnekte ortak alan (kulüp numarası) üzerinden eşleşmeyen kulüp satırları da (Kitap Kulübünde hiç üye yok) DefaultIfEmpty (Boş olanlar için varsayılan değeri kullan) yöntemi yardımıyla çıktı listesine dahil edilmiştir.

var Kulupler = KulupleriGetir();

var Ogrenciler = OgrencileriGetir();

var KuluplerVeOgrencileri =
            from Kulup in Kulupler
            join Ogrenci in Ogrenciler on Kulup.KayitNo equals Ogrenci.Kulup into KulupVeOgrencileri
            from Ogrenci in KulupVeOgrencileri.DefaultIfEmpty()
            select new
            {
                Ogrenci = Ogrenci == null ? "(Öğrenci yok)" : Ogrenci.Adi,
                KulupAdi = Kulup.Adi
            };

foreach (var Satir in KuluplerVeOgrencileri)
{
    Console.WriteLine("{0}, {1} kulübüne üye.", Satir.Ogrenci, Satir.KulupAdi);
}
Console.ReadLine();

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

Tuncay, Gezi kulübüne üye.
Mehmet, Gezi kulübüne üye.
Kenan, Gezi kulübüne üye.
Lale, Gezi kulübüne üye.
Jale, Tiyatro kulübüne üye.
Tekin, Tiyatro kulübüne üye.
Mesut, Tiyatro kulübüne üye.
Fatma, Tiyatro kulübüne üye.
Hale, Tiyatro kulübüne üye.
Ayşe, Tiyatro kulübüne üye.
Erhan, Tiyatro kulübüne üye.
Erhan, Tiyatro kulübüne üye.
Erhan, Tiyatro kulübüne üye.
Veli, Müzik kulübüne üye.
Ahmet, Müzik kulübüne üye.
Cevdet, Müzik kulübüne üye.
Nuri, Müzik kulübüne üye.
(Öğrenci yok), Kitap kulübüne üye.

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



Diğer LINQ Makaleleri:


Yazan: 10.04.16 23:38
canora
101,384p 4ü