Linq

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

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

Data recorder stores 48 terabytes

Network Instruments has brought out an expandable version of its GigaStor network data recorder, capable…

11 saat ago

Microsoft, CiN’deki Vista Fiatini 66$ a cekti

Microsoft firmasi Cin (china)'deki satislarini arttirabilmeyi hedeflemek icin Vista'nin satis fiatini dramatik bir sekilde dusurdu.…

23 saat ago

Microsoft cuts Windows Vista price to $66 in China

Microsoft Corp. has dramatically cut the price of Windows Vista in China in a bid…

1 gün ago

Neden Solucan Deligi(wormhole) ?

Bilim kurgu fanatikleri beni affetsinler ama bu lanet olasi modern fizikte neler oluyor? Physical Review’in…

2 gün ago

Yercekimsel (Gravitasyonel) Asilim Yontemi

Kuresel cam balona benzeyen zaman makinesini uzay ve zamanin herhangi bir koordinat noktasina dogru hareket…

2 gün ago

Trojan Nedir ?

TROJAN NEDİR? Trojan (Truva atı); iki kısımdan oluşan ve bilgisayarları uzaktan kumanda etme amacıyla yazılmış…

3 gün ago