Bir çok LINQ sorgusu, LINQ'nun bildirimsel sorgu sözdizimi ile tanıtılır. Çoğu örneği bu şekilde görürsünüz. Ancak bu bildirimsel sözdizimlerinin tamamı derleme zamanında yöntem (fonksiyon) çağrılarına dönüştürülür. Örneğin;
var basariliOgrenciler = from ogr in Ogrenciler
where ogr.Yazililar[0] >= 55
orderby ogr.Soyadi
select ogr;
şeklindeki sorgu derleme işleminden sonra tekrar C# koduna çevrildiğinde aşağıdaki şekilde görülür.
IOrderedEnumerable<Ogrenci> orderedEnumerable =
Enumerable.OrderBy<Ogrenci, string>(
Enumerable.Where<Ogrenci>
(
(IEnumerable<Ogrenci>) Program.OgrencileriGetir(),
(Func<Ogrenci, bool>) (ogr => ogr.Yazililar[0] >= 55)
),
(Func<Ogrenci, string>) (ogr => ogr.Soyadi));
Yani LINQ bildirimsel söz dizimi bize bir kolaylık olarak sunulmuştur. Gerçekte hepsi birer yönteme karşılık gelir ve derleme işlemi sırasında karşılığı olan yöntem çağırılarına dönüştürülürler.
Bu uzun ve karmaşık görünen yöntem çağrılarını daha kısa ve basit olarak bizim de kullanabilmemiz için .NET Framework Sınıf Kütüphanesinde
System.Linq isim alanında
IEnumerable<T> ve
IEnumerable arayüzlerini uygulayan sınıflarda kullanılabilecek LINQ bildirimsel sözdizimine karşılık gelecek bir çok genişletme yöntemi (Extension Methods) tanımlanmıştır. Bu yöntemleri kullanarak bildirimsel programlama yöntemi ile ifade ettiğimiz sorguları yordamsal programlama ile de ifade edebiliriz. Örneğin üstteki sorgunun yordamsal programlama yani LINQ Yöntem Sözdizilimi (LINQ Method Syntax) ile yazılmış hali şöyledir;
var basariliOgrenciler = Ogrenciler.Where(ogr => ogr.Yazililar[0] >= 55)
.OrderBy(ogr => ogr.Soyadi);
Burada görüldüğü gibi Lambda Ifadeleri (Lambda Expressions) denilen isimsiz fonksiyonlar kullanılmıştır (
ogr => ogr.Yazililar[0] >= 55 gibi). Kullanılan yöntem (Örneğin Where), parametre olarak aldığı isimsiz fonksiyondan dönen değere göre (Örneğin
ogr => ogr.Yazililar[0] >= 55 ) işlem yapacaktır. Bu konu için Lambda Ifadeleri (Lambda Expressions) yazımızı inceleyin.
Örneğimizde 2 tane LINQ Yöntem Sözdizilimi fonksiyonu kullanılmıştır. Birincisi listeden süzme yapabilmek için "
Where" yöntemi, ikincisi ise sonuç listesini sıralamak için "
OrderBy" yöntemi. "
Where" yöntemi ile seçilen öğrenciler daha sonra "
OrderBy" yöntemi ile sıralanmıştır. "
Where", seçilecek öğrencileri belirlemek için, "
OrderBy" ise neye göre sıralanacağını belirlemek için birer Lambda İfadesi ile çağırılmışlardır.
Kullandığımız bu yöntemlerin her ikisi de bir
IEnumerable<T> (Örneğimizde
IEnumerable<Ogrenci> ) döndürür. "
Where" bir
IEnumerable<Ogrenci> döndürdüğünden, ifadenin sonuna nokta koyarak
IEnumerable<T> 'nin bir başka genişletme yöntemi olan "
OrderBy" çağırılabilmektedir. Bu yöntem sayesinde LINQ Yöntem Sözdizilimi sorguları yanyana yöntemler şeklinde yazılabilir.
Sonuç olarak LINQ sorguları hem bildirimsel, hem de yordamsal programlama kullanılarak ifade edilebilir.
System.Linq isim alanında Linq Yöntem Sözdizilimini kullanabilmemiz için "
Where" ve "
OrderBy" gibi bir çok yöntem vardır. Bunların bir listesine
şuradan ulaşabilirsiniz.