27 Kasım 2016 Pazar

LINQ Nedir? Ne için kullanılır?


LINQ(Language Integrated Query); Microsoft’un ,Visual Studio 2008, .NET Framework 3.5 ve C# 3.0 ile kullanıma sunduğu, Entities, SQL, Datasets, xml  ve objects gibi sorgulama işlemi yapılabilecek platform farklılıklarını ortadan kaldırıp, performans kaybı olmadan, ortak bir dil ile daha az kod yazmamızı sağlayan, dil ile bütünleşmiş sorgulama ifadeleri, dil ile bütünleşmiş sorgulama metadolojisi dir.
LINQ ile , ADO.NET  kullanarak sorguladığımız nesnelere, XML dosyalarına ve .NET nesnelerine ulaşıp, sorgulama işlemleri yapabilmekteyiz. .Net Framework  bu sorgulama işlemlerini yapabilmemiz için bize specific provider lar sunmaktadır. Bu LINQ Provider(sağlayıcı) ları; Linq to Object, Linq to Dataset, Linq to SQL, Linq to Entity ve Linq to XML 'dir.
Linq to XML : XML dosyalarını sorgulamak için kullanılır. System.XML.Linq  kütüphanesi kullanılırak sorgulama işlemleri yapılabilir.
Linq to Object : Sadece IEnumerable<T> koleksiyonları için kullanılır. Yani , List tipindeki bir nesne, Linq to Object ile sorgulanabilir. Sorgulama işlemlerinde , System.Linq.Enumerable kütüphanesi kullanılır.
Linq to SQL : SQL Server veritabanında bulunan verileri sorgulamak için kullanılır. Linq ile SQL arasındaki ilişki DBML ( Database Markup Language - Veritabanı İşaretleme Dili ) ile kurulur.
Linq to Dataset : ADO.NET DataSet tiplerini sorgulamak için kullanılmaktadır.
Linq to Entity : ADO.NET Entity Framework tarafından oluşturulan nesneleri sorgulamak için kullanılır.
Linq to SQL ile Linq to Entity Arasındaki Fark : Linq to SQL sadece SQL veri tabanındaki verileri sorgulamayı sağlarken, Linq to Entity, Entity framework kullanıldığı için veritabanından bağımsız sorgulama yapmayı sağlar. Yani SQL veritabanına bağlı kalmadan, Entity Framework ile hangi veri tabanına bağlanılmış ise o veritabanında ki verileri sorgulamak için kullanılır.
LINQ sorgularını, bildirimsel ve yordamsal(yöntemsel) olmak üzere iki tür yazım şekli(syntax) ile yazabilmekteyiz;
Örnek : Birinci Yazılı sınav notu 55 ve daha büyük olan öğrencilerin soyadlarının listesini getiren Linq ifadeleri :
a) Bildirimsel syntax :
            var query = from ogrenci in ogrenciler
                        where ogr.YaziliSinavlar[0] >= 55
                        select ogr.Soyadi;
b) Yöntemsel syntax :
            var query = ogrenciler.Where(ogr => ogr.YaziliSinavlar[0] >= 55)
                                  .Select(ogr => ogr.Soyadi);
Örnek :
a) Bildirimsel syntax :
    List<Product> products = GetProductList();
    var categories = from p in products
        group p by p.Category into g
        select new { Category = g.Key, AveragePrice = g.Average(p => p.UnitPrice) };
ObjectDumper.Write(categories);
b) Yöntemsel syntax :
    List<Product> products = GetProductList();
    var categories= products.GroupBy(p => p.Category)
        .Select(g => new { Category = g.Key, AveragePrice = g.Average(p => p.UnitPrice) });
    ObjectDumper.Write(categories);
Örnek Çıktı;
Category=Beverages 
AveragePrice=37.979166666666666666666666667 
Category=Condiments 
AveragePrice=23.0625 
Category=Produce 
AveragePrice=32.3700 
Category=Meat/Poultry 
AveragePrice=54.006666666666666666666666667 
Category=Seafood 
AveragePrice=20.6825 
Category=Dairy Products 
AveragePrice=28.7300 
Category=Confections 
AveragePrice=25.1600 
Category=Grains/Cereals
AveragePrice=20.2500
     Daha detaylı sorgulama örneklerini “https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b” ve “http://yazilim.cevapsitesi.com/EtiketMakalesi/linq_11/21/linq-gruplama-grouping-ornekleri”  kaynaklarından inceleyebilirsiniz.

Hiç yorum yok :

Yorum Gönder