İpucu

 Bu ipucunda birden çok tabloyu DynamicLINQ kullanarak nasıl bağlayıp (JOIN), bunlardan nasıl veri çekebiliceğimizi konuşacağız.

Dynamic Expression sınıfıyla tabloları birleştirmek için gelen yeni bir metod olmasa da; biz birkaç, tabir yerindeyse, ayak oyunuyla bu işin de üstesinden gelebiliyoruz.

[C#] Klasik LINQ

private static DBDataContext DB = new DBDataContext();

var x = from a in

         (from b in DB.Kisis where b.Tip == 'A' select b)

         join p in

         (from t in DB.Telefons where t.TelefonTip == 'C' select t) on a.ID equals p.KisiID

         select new { a.Ad, a.Soyad, p.Telefon1 };

 

foreach(var kayit in x)

{

   Console.WriteLine("Ad={0} Soyad={1} Telefon={2}",kayit.Ad,kayit.Soyad,kayit.Telefon1);

}

Yukarıdaki kod parçasındaki altı çizili sorguları dinamik olarak yazabiliriz. Bir önceki makalemde bahsetmiş olduğum Where koşulunu kullanmak dışında birşey yapmayacağız aslında.

[C#] Dynamic LINQ

private static DBDataContext DB = new DBDataContext();

 var x = from a in (DB.Kisis.Where("Tip==@0",'A'))

         join p in (DB.Telefons.Where("TelefonTip=@0", 'C')) on a.ID equals p.KisiID

         select new {a.Ad, a.Soyad, p.Telefon1};

 

foreach(var kayit in x)

 {

   Console.WriteLine("Ad={0} Soyad={1} Telefon={2}",kayit.Ad,kayit.Soyad,kayit.Telefon1);

 }

 

Gördüğünüz üzere olay bu kadar kolay. (Mesut hoca'dan da bir alıntıda bulunmuş olayım)

 

Bu metodu sadece JOIN'ler için kullanacağız diye bir kaide yok tabii ki. Sorgu içi sorgu (Inner Queries) uygulamalarımız için de bu örneği kullanabiliriz.

 

Ufak bir uyarıda bulunayım : Dynamic Expression sınıfı ile gelen Select() metodunu bu tarz uygulamalarda kullanamıyoruz ne yazık ki.Onun yerine yukarıdaki örneklerde de görebileceğiniz üzere, klasik select sözümüzü kullanıyoruz.