-

LINQ(LANGUAGE INTAGRATED QUERY)

Linq Nedir,NerelerdeKullanılır?
Linq’uin Türkçe karşılığı “Dİl ile Bütünleştirilmiş Sorgu”dur.Linq teknolojisi,  .Net Framework 3.5ile beraber  ortaya çıktı.Linqteknolojisi ile veriye daha kolay erişebilir ve veri üzerinde  tıpkı veri tabanı sistemlerindeki gibi basitsorgular gerçekleştirebiliyoruz.Genelde veri kaynağı olaral XML ve ilişkisel veritabanları kullanırız.Linqin yaptığı şey programlama dilinde tek bir veri tabanıkaynağına erişmek yerine  veri erişiminiprogramlama dili ile tümleşik bir şekilde sunmaktır.Linq, sqldeki gibi sorgularyapılmasını sağlar fakat farklı olarak bu sorguları nesnel ifadeler ileyapar,bu ifadeler ile veri kaynağı arasındaki iletişimi sağlayan da Linq dir.Linqyazdığımız sorguları IEnumerable<T> türevli tipler üzerinde kullanabiliyoruz.
Lİnq’de kullanılansınıflar:
·        System.Query:Sorguların gerçeklştirilmesi içingerekli olan sınıfları içerir.
·        System.Xml.Xlinq:Xml dökümanlarınınsorgulanabilmesi için gerekli olan sınıfları içerir
·        System.Linq :Linq e ait sınıf ve arabirimler busı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 toObject:Koleksiyonları sorgulama yarar.Fakat sadece Ienumerable<T>arabirmini destekleyen koleksiyonlar sorgulanır.System.Linq.Enumarable a aitfonksiyonlar kullanılır.
·        Linq toXML(Xlinq):Xml belgelerini sorgulamak için kullanılır,bu verileri hızlı vekolay sorgulama yeteneği kazandırıyor.System.Xml.Lİnq  kütüphanesini kullanılır.
·        Lİnq toSQL(Dlinq):İlişkisel veri tabanlarının sorgulanmasını sağlar,bunlarsorgularken güç ve performans kazandırır.Linq ile sql arasındaki iletişimiDBML(Database Markup Language-Veritabanı İşaretleme Dili) sağlar.
·        Linq toDataset:Ado.Nettek Dataset nesnelerinin ilişkisel veritabanı gibisorgulanması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 dekullanılıyor tabi ki).Linq to sqlde kullanım kolaylığı ve kod kısalığıvardır.Ado.Nette veri çekmek için connectionstring,sqlcommand,dataset,bağlantıyı açma kapama gibi işlemler yapmakzorundayız.Bu da çok fazla kod gerektiren yazılımlar için çok yükgetirir.Performans açısından ise hemen hemen aynılar.Kullanım tercih vealışkanlığa bağlı tabi ki.
Linq To Sql Örneği:


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


1)Projeye terstı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 kullanmakistediğimiz veritabanı ve içeriğindeki kullanılacak olan tabloları eklememizgerekir.
4)Kullanılmak istenen veritabanını server explorer kısmındaneklememiz gerekecek.Data Connections üstine ters tıklayıp-add connectiondedikten sonra aşağıdaki ekran karşımıza gelecektir,burdan server adı veveritabanı adı seçilip eklenir.Ben bu örnekte hazır veritabanı olan Northwind’Iekledim
5)Veri tabanını server explorer a  ekledikten sonra veritabanı kullanılmayahazırdır.Veritabanını istediğimiz kısmını kullanabiliriz.Bütün tablolara burdaneriş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ğimizsql 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 metodkullanılabilir.
Az once eklemiş olduğuz Northwind linq to sql classını kullanmak içinDataContexten  nesne oluşturmak gerekir.
  NorthwindDataContextdb = new NorthwindDataContext();
  void Urundoldur(intid)
        {
         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();
        }