LINQ Nedir ? Nasıl Okunur ?

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.

Bunun ne avantajı vardır ?

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.

Hayatımıza LINQ girdiği anda bu durum şöyle değişecekti :

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.

Emre ÖZÇELİKEL , 23 belge yazmış

C#, .NET 7, MVC ve MAUI konularında öğrenmeye ve öğretmeye meraklı bir yazılım geliştiricidir. Kendi firması üzerinden, Türkiye'nin önde gelen firmalarına yazılım destek hizmetleri vermekle beraber, eğitim kurumlarında bu konularda yüz yüze eğitimler de vermektedir.

Cevap Gönderin