30 Ekim 2011 Pazar

LINQ(LANGUAGE INTAGRATED QUERY)


Linq Nedir,Nerelerde Kullanılır?
Linq’uin Türkçe karşılığı “Dİl ile Bütünleştirilmiş Sorgu”dur .Linq teknolojisi,  .Net Framework 3.5 ile beraber  ortaya çıktı.Linq teknolojisi ile veriye daha kolay erişebilir ve veri üzerinde  tıpkı veri tabanı sistemlerindeki gibi basit sorgular gerçekleştirebiliyoruz.Genelde veri kaynağı olaral XML ve ilişkisel veri tabanları kullanırız.Linqin yaptığı şey programlama dilinde tek bir veri tabanı kaynağına erişmek yerine  veri erişimini programlama dili ile tümleşik bir şekilde sunmaktır.Linq, sqldeki gibi sorgular yapılmasını sağlar fakat farklı olarak bu sorguları nesnel ifadeler ile yapar,bu ifadeler ile veri kaynağı arasındaki iletişimi sağlayan da Linq dir.Linq yazdığımız sorguları  IEnumerable<T> türevli tipler üzerinde kullanabiliyoruz.
Lİnq’de kullanılan sınıflar:
·         System.Query:Sorguların gerçeklştirilmesi için gerekli olan sınıfları içerir.
·         System.Xml.Xlinq:Xml dökümanlarının sorgulanabilmesi için gerekli olan sınıfları içerir
·         System.Linq :Linq e ait sınıf ve arabirimler bu sınıf altında bulunur.
·         System.Data.Linq:Sql tablolarının sorgulanması için gerekli olan sınıfları içerir
Linq Çeşitleri:
Lİnq;linq veritabanları,ado.net,xml  ve bellekte bulunan veriler için bize özel sağlayaccılar sunar.
Bunlar:
·         Lİnq to Object:Koleksiyonları sorgulama yarar.Fakat sadece Ienumerable<T> arabirmini destekleyen koleksiyonlar sorgulanır.System.Linq.Enumarable a ait fonksiyonlar kullanılır.
·         Linq to XML(Xlinq):Xml belgelerini sorgulamak için kullanılır,bu verileri hızlı ve kolay sorgulama yeteneği kazandırıyor.System.Xml.Lİnq  kütüphanesini kullanılır.
·         Lİnq to SQL(Dlinq):İlişkisel veri tabanlarının sorgulanmasını sağlar,bunlar sorgularken güç ve performans kazandırır.Linq ile sql arasındaki iletişimi DBML(Database Markup Language-Veritabanı İşaretleme Dili) sağlar.
·         Linq to Dataset:Ado.Nettek Dataset nesnelerinin ilişkisel veritabanı gibi sorgulanmasını sağlar.



Ado.Net ve Linq to Sql Arasındaki fark:
Linq to Sql den önce veritabanından veri çekmek için Ado.Net kullanılırdı(Günümüzde de kullanılıyor tabi ki).Linq to sqlde kullanım kolaylığı ve kod kısalığı vardır.Ado.Nette veri çekmek için connection string,sqlcommand,dataset,bağlantıyı açma kapama gibi işlemler yapmak zorundayız.Bu da çok fazla kod gerektiren yazılımlar için çok yük getirir.Performans açısından ise hemen hemen aynılar.Kullanım tercih ve alışkanlığa bağlı tabi ki.

Linq To Sql Örneği:


Linq to Sql Kullanırken Takip Edilecek Adımlar:


1)Projeye ters tıklayıp add-new item deyip,linqtosql Classes eklemek ,



2)Classa isim verdikten sonra ekleme işlemi tamamlanmış olur,
 

3)Northwind.dbml classı oluşturulmuş oldu,buraya kullanmak istediğimiz veritabanı ve içeriğindeki kullanılacak olan tabloları eklememiz gerekir.


4)Kullanılmak istenen veritabanını server explorer kısmından eklememiz gerekecek.Data Connections üstine ters tıklayıp-add connection dedikten sonra aşağıdaki ekran karşımıza gelecektir,burdan server adı ve veritabanı adı seçilip eklenir.Ben bu örnekte hazır veritabanı olan Northwind’I ekledim

5)Veri tabanını server explorer a  ekledikten sonra veritabanı kullanılmaya hazırdır.Veritabanını istediğimiz kısmını kullanabiliriz.Bütün tablolara burdan erişebiliriz,kullanacaklarımızı sürükle bırak ile .dbml cllasına eklemeliyiz.



Bundan sonrası linq to sql in işi,kod tarafında istediğimiz sql sorgularını gerçekleştirebiliriz.

Örnek bir uygulama olarak aşağıdaki kod parçasını inceleyebiliriz:
Hazır veritabanı olan Northwind içindeki ürünleri getirmek için aşağıdaki metod kullanılabilir.
Az once eklemiş olduğuz Northwind linq to sql classını kullanmak için DataContexten  nesne oluşturmak gerekir.

  NorthwindDataContext db = new NorthwindDataContext();

  void Urundoldur(int id)
        {
         grdUrunler.DataSource = from p in db.Products
                     where p.CategoryID == id
                     select new
                        {
           Adi = p.ProductName,
           Stok = p.UnitsInStock,
           Fiyat = p.UnitPrice,
           Tedarikçi = p.Supplier.CompanyName,
           Kategorisi = p.Category.CategoryName
                                  };
          grdUrunler.DataBind();
        }

 
Facebook

Bizi takip edin!

ESOGÜ Bilişim GünleriESOGÜ Bilişim Günleri