LINQ , yani Language Integrated Query . Okunuşu aynı “link” gibidir. Bir çok eğitim videolarındaki Türk eğitmenler maalesef yanlış telaffuz etmektedir. “lin-ku” diye okuyanların sayısı çok fazladır. Bunun en doğrusunu Google’da aratarak da bulabilirsiniz. “How to pronounce linq” diye arattığınızda, google amca sizlere aşağıdaki gibi bir sonuç verecektir.
Linq, Microsoft’un çıkardığı, bir sorgulama dilidir. Ancak burada sorguyu SQL Server’a değil, .net tabanlı yazdığımız yazılımlarda kullandığımız, Collection’lara atmaktayız. Yani diğer bir değişle, obje listelerine atmaktayız.
Mesela, elimizde bir Ogrenci.cs diye bir class’ımız olsun. Ve bundan örneklenmiş bir öğrenci listemiz olsun.
Öğrenci sınıfımız (class’ımız) ise şöyle olsun.
public class Ogrenci { public int Id { get; set; } public string Ad { get; set; } }
Daha sonra bir tane, içerisinde, Öğrenci tipinden, nesneler içeren bir Generic List oluşturalım
List<Ogrenci> list = new List<Ogrenci>();
Öğrenci listemiz oluştu.
Şimdi bunun içerisine bir kaç tane öğrenci ekleyelim.
list.Add(new Ogrenci { Id = 1, Ad = "Emre" }); list.Add(new Ogrenci { Id = 2, Ad = "Ahmet" }); list.Add(new Ogrenci { Id = 3, Ad = "Mehmet" });
bu şekilde listemizde 3 tane öğrenci eklemiş olduk. Farzedelim ki bu öğrenciler arasından ismi Mehmet olanının Id’sini ekrana bastırmak istiyoruz ? Eğer hayatımızda linq olmasaydı bunu nasıl yapardık ? Bir çok yolu olabilir.
Bu eski metotlardan bir tanesi foreach döngüsü ile iterate edip, if ile kontrol edip, duruma göre hareket etmektir.
foreach(Ogrenci ogr in list) { if(ogr.Ad=="Mehmet") { Console.WriteLine(ogr.Id); } }
Bir başka yaklaşım ise for döngüsüyle olabilir ? Burada da list’in uzunluğu kadar bir iterasyon yapabiliriz istersek.
for(int i=0;i<list.Count;i++) { if(list[i].Ad=="Mehmet") { Console.WriteLine(list[i].Id); } }
Örnekler ve çözüm şekilleri çoğaltılabilir. Ancak görüldüğü üzere, linq dışındaki her çözüm, bir döngü kurup, daha sonra içerisinde if cümleleri ile kontrol etmek üzerine kurulu.
Console.WriteLine((list.Find(ogr => ogr.Ad == "Mehmet") as Ogrenci).Id);
Gördüğünüz gibi tek satırda işi bitirebildik 🙂
Aslında tek satırda işi bitirebilmek için biraz da c# diline hakim olmak gerekiyor. Yukarıdaki komutun yapmış olduğu şey aslında sırasıyla şu :
list nesnesinin içine Find komutu ile bir sorgu gönderiyor. Aslında her sorgu, özünde bir nevi döngüdür diyebiliriz. Find komutu çalıştığında, liste içerisinde tek tek gez, her bir nesneyi “ogr” diye bir değişkene ata ve ogr‘nin Ad property‘si “Mehmet“‘e eşit olanı, Ogrenci tipine “cast” et ve bu cast edilmiş nesnenin, Id property‘sini al.
Bunu daha açık şekilde de yazabilirdik aslında.
Ogrenci ogrenci = list.Find(ogr => ogr.Ad == "Mehmet") as Ogrenci; Console.WriteLine(ogrenci.Id);
Ya da “as” yerine, CAST ‘de kullanabilirdik..
Ogrenci ogrenci = (Ogrenci)list.Find(ogr => ogr.Ad == "Mehmet"); Console.WriteLine(ogrenci.Id);
Linq’in hayatımıza kattığı kolaylığı, kabaca ne işe yaradığı hakkında bir nebze olsa bilgi edinebilysek ne mutlu bizlere. İlerleyen yazılarda daha detaylı işlemlere değineceğiz.
Takıldığınız noktalar olursa mutlaka yorum kısmına yazın, elimden geldiğince yardımcı olmaya çalışacağım.
ÖZELLİKLER: Boyut: 28x8x6 cm Ağırlık: 850gr Ekran: Yok Devre sayısı: 30 Konuşma süresi: 35 dakika…
There are two kinds of questions: yes or no questions and wh- questions. You ask…
A positive sentence tells you that something is so. A sentence that tells you something…
Use the base form of a verb to give commands or make direct requests. This…
A sentence is a group of words that expresses a complete thought. A sentence must…
An interjection is a word that expresses a sudden, strong feeling such as surprise, pain,…