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
|
Kaynaklar:
- http://erengulb.blogspot.com.tr/2013/11/linq-nedir.html
- http://www.slideshare.net/marius.iulian/climatologic-factors-and-weather-analysis-for-tourism-and-meteorological-stations
- http://blogs.msmvps.com/abu/2008/11/29/c-language-evolution-features-of-c-4-0/
- https://en.wikipedia.org/wiki/Language_Integrated_Query#Other_providers
- http://yazilim.cevapsitesi.com/EtiketMakalesi/linq_11/9/linq-temel-islemler-suzme-filtering