Linq Sorgusu Yazım Şekilleri

LINQ (Language Integrated Query) ile sorgu yazmak için kullanabileceğimiz 2 farkı yöntem bulunuyor. Bunlardan birincisinin adı Linq Syntax‘tır. Bu arada LINQ ile verimli çalışabilmek için Entity Framework kullanmak gereklidir. Çünkü entity Framework bizleri, veri tabanı nesnelerinden kurtarıp, kendi objelerimizle çalışma imkanı sunmaktadır. Elimizdeki bu objelerle çalışırken hayatımızı kolaylaştıracak olan sorgular da linq sorgularıdır.

LINQ Syntax

Linq Syntax’un yapısı sanki SQL sorgusu yazar gibidir.

Farzedelim ki, elimizde yine bir Ogrenci listesi olsun.

            List<Ogrenci> list = new List<Ogrenci>();
            list.Add(new Ogrenci { Id = 1, Ad = "Emre" });
            list.Add(new Ogrenci { Id = 2, Ad = "Ahmet" });
            list.Add(new Ogrenci { Id = 3, Ad = "Mehmet" });

Ad property’sinde, “m” harfi geçen öğrencilerin listesini Ad’a göre sıralanmış şekilde bize getiren sorguyu LINQ Syntax ile yazalım.

                var sorgu = from ogr in list
                            where ogr.Ad.Contains("m")
                            orderby ogr.Ad
                            select ogr;

Tıpkı Sql sorgusu gibi değil mi ? Ancak burada cümleyi sanki tersten kuruyoruz. SQL Cümleleri genelde “select” ile başlarken, burada select ile bitiyor. Bu şekilde yazılıma LINQ Syntax deniyor. Sizler kendi bilgisayarınızda, from yada where  komutunu yazdığınızda, Visual Studio altını kırmızı çizer, yada renklendirmezse, ctrl+. yaptığınızda, sizin için Linq namespace’ini ekleyecektir ve hata gidecektir. Ancak bir çok yeni version .net projelerinde, linq zaten otomatik eklenmiş geldiği için bu hatayı kolay kolay almayacaksınız.

Extension Methods

Şahsen benim daha çok sevdiğim yazım şeklidir. Kullanımı daha basit gelmektedir. Sanırım, her şeyi tek satırda halletmek hoşuma gittiği için bu yöntem daha sıcak geliyor.

Elimizdeki bir Collection’ın ismini yazıp nokta koyduğumuzda Visual Studio bizlere bir sürü metot sunmaktadır.

Bu metotlar zincirleme bir şekilde kullanılarak istenilen sorgu elde edilebilir. Az önce yazmış olduğumuz sorguyu Extension Methods tekniği ile yazmaya kalkarsak, şöyle bir görüntü ortaya çıkacaktır.

var sorgu= list.Where(ogr => ogr.Ad.Contains("m")).OrderBy(ogr => ogr.Ad);

Gördüğünüz gibi, önce Where kullandık, ondan bize gelen sonuclar için nokta koyup, bu sefer OrderBy’ı çağırdık. Böylelikle içerisinde “m” harfi geçen kayıtları, Ad’a göre sıralanmış bir şekilde elde ettik. Tabi bu sorgu bize yine bir collection döndürdü. Dolayısı ile sonucu ekrana yazdırabilmek için

foreach(var ogr in sorgu)
    Console.WriteLine(ogr.Ad);

Şöyle kısacık bir foreach‘e ihtiyac duyabiliriz 🙂

Hangisi Daha İyi ?

Buna herkes kendisine göre cevap vermelidir.  Performans açısından herhangi birinin ötekinden daha üstün olduğu söylenemez. SQL Sorgusu yazmaktan hoşlanan ve ona kendisini daha yakın hisseden yazılımcılar genelde LINQ Syntax kullanmaktadırlar. Ancak Extension Methods tekniği lambda expressionla sorgu yazmayı seven yazılımcılar için çekici gelmektedir.

Ancak, şöyle bir gerçek vardır ki, o da LINQ Syntax, Extension Methods’un alt kümesidir. İlerleyen yazılarımızda göreceğimiz üzere, extension methodlarla yazdığımız bazı şeyleri, LINQ Syntax ile neredeyse yazılamadığını göreceksiniz. O yüzden benim tavsiyem, kendinizi Extension Methods’a alıştırmanız , çünkü orada çok daha fazla esnekliğe sahip olacaksınız. 🙂

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