4 Mayıs 2014 Pazar

Orta düzey: Linq ile Tabloları Nesneye Çevirmek

Bu konumuzda veritabanımızda bulunan bir tabloyu nesneye dönüştürme işlemi yapacağız. Aslında reflection altında daha ciddi manada yapılabilecek çalışamalar olsada bu seferlik Linq kullanımına değineceğim.


İlk olarak veritabanımızda bir tablo oluşturalım.

İkinci olarak visual studio ortamında consol uygulaması oluşturuyoruz. Neden consol e kalabalık değil de ondan. Oluşturacağımız nesneyi hızlı bir şekilde uygulamanın ana class dosyasına ekleyelim.

Görüldüğü gibi tabloda ki alanlarla aynı adda özellikler oluşturdum. Efendim farklı adlarda olamazmıydı e olurdu ama olayın doğasına aykırı, Microsoft Entity Framework de bunu yapıyor ya bir hikmet vardır diyoruz. Şimdi db bağlantılarını sağlayalım.

Burada da temel olarak kullanabileceğimiz datatable doldurma işlemi için gerekli olan minimum kodla verileri alıyoruz. Tabi tablomuza kayıt girmeyi unutmayın ben göstermedim diye de atlamazsanız iyi olur. Şimdi bir debug çekerek kontol edelim olayı.

Evet Autos penceresinde bulunan rows değerini açtığımızda count değerinin 4 olduğunu görüyorum. Tabloma 4 adet kayıt girmiştim. Hemen Linq koduna başlayalım.

Görüntüde görüldüğü gibi bir liste oluşturuyoruz tabi taşıyıcı tipi bizim modelim nesnesi ile. Daha sonra from satırında tablomuzun AsEnumerable() fonksiyonu ile datarow ları tablo satırları yerine sıralanmış datarow dizisine dönüştürmüş oluyoruz. Enumerable kelimesinin manası da sıralanmış dizisel değerler gibi birşey. Her bir satırı _m değişkenimize bindirdikten sonra geri dönüş sağlamak için select kısmında genelde new denildikten sonra { bu parantez kullanılır ki bu dinamik bir nesne oluşturmak içindir. Bizim nesnemiz ise belirli olduğu için new modelim { şeklinde başlıyoruz.  Alt satıra indiğimizde nesnemize ait özellikleri yazmaya başladığımızda intelli sense (şu yazmaya başlayınca bize uygun sonuçlar gösteren cursorun altında çıkan liste) hemen tanıyor olaraktır. _m bir sütun nesnesi olduğu için okuyacağımız sütunu field methoduyla çağırıyoruz. Ancak dönecek tipi belirtmemiz şart. Örnekteki gibi eşleşme sağlandıktan sonra normalde dönecek şey enumerable tipinde modelim dizisi olacağı için listeye direk atamamız mümkün olmuyor. Linq sorgusunu parantez içerisine alıp sonuna nokta koyarak ToList fonksiyonu yardımıyla listeye dönüştürebiliriz. Dönüştüreceğimiz listenin taşıdığı tipi de belirtip olayı sonlandırıyoruz.
Ekrana sadece listenin countunu (adetini) yazdırdım. Bu 4 olması gerek çünkü 4 kaydım vardı.

Bakın bize 4 değerini verdi. Demekki tablolarımızı nesnelere dönüştürme işlemi o kadar da zor değilmiş. İlla ki nesneye ihtiyaç duyuyorsanız ve projede küçük bir veri kümesini bir şekilde nesnelleştirmeniz şart ise Entity Framework kurmaya gerek kalmadan elle de bu işlemi yapabiliyoruz.
Bir daha ki yazımda görüşmek dileğiyle.

0 yorum: