9 Eylül 2008 Salı

LINQ to SQL

Veritabanını sorgulamak için linq to sql kullanacağız.
Herhangi bir veritabanına ait bir tabloyu sorgulamak için projenizin içerisine Add->New Item->LINQ To SQL Classes eklemeniz gerekiyor. Bu bize projemizde .dbml uzantılı bir sayfa daha oluşmasını sağlıyor. Sonra sorgulamak istediğimiz tabloları Server Explorer dan bu sayfa üzerine sürükleyip bırakmalıyız. Biraz sonraki örneklerde Northwind veritabanı ve içinde calisanlar ve siparisler veritabanı kullanılmıştır.
Şimdi öncelikle kod kısmında yeni oluşturduğumuz sayfayı kullanabilmek için bir kopyasını alalım
NorthwindDataContext db = new NorthwindDataContext();

Ex1: Calisanlar tablosundan unvanı Mr. olanları çekelim. Bunu ilk önce bildiğimiz yöntemle yapalım aradaki fark anlaşılsın diye.
string baglanti = "Server=.; Database=Northwind; Integrated Security=SSPI;";
SqlConnection con = new SqlConnection(baglanti);
DataTable calisanlar = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("Select * from calisanlar where unvan='Mr.'", con);
da.Fill(calisanlar);
dataGridView1.DataSource = calisanlar;
Şimdi de eşdeğer LINQ sorgusu
var calisanlar = from n in db.Calisanlars
where n.Unvan == "Mr."
select n;
dataGridView1.DataSource = calisanlar;

Ex2: Calisanlar ve siparisler tablosunu birleştirerek calisanID, adSoyad, ulke, unvan ve nakliyeUcretleri alanlarından ilk 10 tanesini alan LINQ
var calisanlar = (from c in db.Calisanlars
from s in db.Siparislers
where c.CalisanID == s.CalisanID
select new { s.CalisanID, adSoyad = c.Ad + " " + c.Soyad, c.Ulke, c.Unvan, s.NakliyeUcreti }).Take(10);

Ex3: Veri tabanına yeni bir kayıt ekleyelim.
Calisanlar calisan = new Calisanlar();
calisan.Ad = "Ahmet";
calisan.Soyad = "Kısa";
calisan.Unvan = "Mr.";
calisan.DogumTarihi = DateTime.Now;
db.Calisanlars.InsertOnSubmit(calisan);
db.SubmitChanges(); //Veri tabanına değişikleri kaydediyor. Adapter nesnesinin Update metodu gibi.

Ex4: Soyadımı yanlış yazmışım onu UPDATE edelim.
Calisanlar calisan = db.Calisanlars.First(c => c.Ad == "Ahmet");
calisan.Soyad = "UZUN";
db.SubmitChanges();

Ex5: Birden çok kayıt olursa UPDATE etmek istediğimiz. Calisanlar tablosunda bolge alanları boş bırakılmış en azından o alanlara boş yazalım.
var calisanlar = from c in db.Calisanlars
select c;
foreach (var calisan in calisanlar)
{
calisan.Bolge = "yok";
}
db.SubmitChanges();

Ex6: Yabancıların yanında benim adım iyi durmadı onu SİLelim.
var silinecek = from c in db.Calisanlars
where c.Ad == "Ahmet" && c.Soyad == "UZUN"
select c;
db.Calisanlars.DeleteAllOnSubmit(silinecek);
db.SubmitChanges();

Her türlü örnekten bir tane yapmaya çalıştım. Fazlasını herkes kendisi yapsın.
İşte size baka baka ömrünüzün yetmeyeceği LINQ örnekleri (37Kb) Microsoft çalışanı bir abimizin bloğundan almıştım ismini hatırlayamadım :(.

2 yorum:

yunus özen dedi ki...

Çok güzel bir blog yazısı olmuş. Karşılaştırmalı olarak vermek de çok hoş olmuş. LINQ yazılarının devamını beklliyoruz.

Örnek proje de aslında download edebilebilse daha hoş olurdu.

İyi çalışmalar.

Ahmet Uzun dedi ki...

Doğru söylüyorsun Yunus abi projeyi koymak hiç aklıma gelmedi. Bundan sonra ekleyeceğim. Uyarın için teşekkürler.