Bilgisayar

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

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.

Recent Posts

Galata Kulesi

Galata Kulesi, dünyanın en eski kulelerinden biridir. 528 yılında Bizans İmparatoru Justinianus hükümdarlığı sırasında yapılmıştır.…

11 saat ago

Demir

Demir elementinin özellikleri Arı halde gümüşsü beyaz renkli bir metal olan demir (Fe), dünyada ki…

23 saat ago

Canlılarda Üreme ve Çoğalma

Üreme:Canlıların soylarının devamı için kendilerine benzer yavrular meydana getirmelerine denir.Eşeyli ve eşeysiz olarak iki şekilde…

1 gün ago

Ataol Behramoğlu

13 Nisan 1942'de İstanbul Çatalca'da doğdu. İlköğrenimini Kars ve Çankırı'da yaptı. 1966'de Ankara Üniversitesi Dil…

2 gün ago

O’na Hacker Denmez !

İnternet dünyasında maalesef gerek basında çıkan haberler olsun gerekse okuduğumuz makaleler olsun bize hep hackerlar…

2 gün ago

Replay Attacks [Yeniden Gönderme Saldırıları ]

Replay kelimesinin türkçeye tam olarak nasıl çevrildiğinden emin olamadığım için, başlığı yazarken  kendimce en manalı…

3 gün ago