Yazılım.
CevapSitesi.com Beta!
Çözüm Noktası
Facebook, Twitter, Google+ veya e-posta ile paylaşın.
| Sorular | Makaleler | Üyeler | Etiketler  | İletişim
Soru sormak ya da cevap vermek için;
giriş yapın veya üye olun.

Sosyal medya hesaplarınızla da giriş yapabilirsiniz.
0

LINQ Yöntem Sözdizimi (LINQ Method Syntax)

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ındaIEnumerable<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.



Diğer LINQ Makaleleri:


Yazan: 09.04.16 20:00

101,387p 4ü