Bu makalede LINQ to SQL kullanarak SQL sorgularında kullandığımız JOIN işlemini gerçekleştireceğiz.
Öncelikle JOIN işleminin katı SQL kodunu inceleyelim.
Elimizde OnlineSatis isminde bir veritabanı olsun. Bu veritabanı içinde siparis ve urunler isminde iki adet tablomuz olsun.
Bu tabloları inceleyelim:
urunler tablosunda, firmada bulunan ürünlerin bilgileri bulunmaktadır. Bu bilgileri birbirinden ayırt edici özelliği ise id sütunudur. siparis tablosunda ise hangi müşterinin (musteriid) hangi ürünü (urunkodu) kaç adet sipariş verdiği bilgileri bulunmaktadır.
Bu tablolardaki bilgilerden, sipariş verilmiş olan ürünleri görmek istiyoruz.
Bu işlemi gerçekleştiren katı SQL kodu aşağıdaki gibidir:
|
SELECT DISTINCT urunler.adi FROM urunler INNER JOIN siparis ON urunler.id = siparis.urunkodu
|
Şimdi bu işlemi LINQ to SQL ile çalıştıralım:
Öncelikle projemize LINQ to SQL Data Classes ekliyoruz.
Server Explorer penceresinden yeni bir bağlantı oluşturup veritabanımızda bulunan urunler ve siparis isimli tabloları DataClasses1 içerisine sürüklüyoruz:
Şimdi kodumuzu yazabiliriz:
|
private void VerileriGetir()
{
DataClasses1DataContext dc = new DataClasses1DataContext();
var urunlerim = (from urunum in dc.urunlers
join siparisim in dc.siparis on urunum.id equals siparisim.urunkodu
select urunum.adi).Distinct();
foreach (var urun in urunlerim)
{
listBox1.Items.Add(urun);
}
}
|
from urunum in dc.urunlers join siparisim in dc.siparis on urunum.id equals siparisim.urunkodu
DataClasses içerisinde bulunan urunler tablosunu join anahtar kelimesiyle siparis tablosu ile birleştiriyoruz. on anahtar kelimesinden sonra ise SQL sorgularında olduğu gibi birleştirme işlemini hangi sütunlar üzerinden gerçekleştireceğimiz bilgisini yazıyoruz. urunler tablosunun id sütunu ile siparis tablosunun urunkodu sütununun eşit (equals) olduğu kayıtları alacağız.
Son olarak da foreach ile veritabanından aldığımız verileri listbox’a yazdırıyoruz.
Ekran çıktısı aşağıdaki gibi olacaktır.
Veysel Uğur KIZMAZ