LINQ Söz Dizimleri ve Sık Kullanılan LINQ Metotları

Enes Çakır
Neredekaltech
Published in
2 min readMay 30, 2023

LINQ (Language Integrated Query) C# dilinde SQL sorgularını metotlar veya sorgu söz dizimleri yöntemleriyle programlama dilinden kopmadan çalıştırabilmemizi sağlar. Bu sorgular koleksiyonlar veya veri tabanları üzerinden çalıştırılabilir.

LINQ kütüphanesinin Query ve Method adı verilen iki farklı söz dizimi bulunmaktadır.

Query Syntax

Bu yazım şeklinin aslında ham SQL sorgusu yazmaktan pek bir farkı yoktur. Örnek:

Query söz dizimi temel kullanımı

Ham SQL sorgusundan en çok göze çarpan farkı select işleminin en sonda yapılması diyebiliriz. Select atarken sonucu bir model yerine object üzerinden de alabilirsiniz bu sizin kullanımınıza kalmış bir durum.

Method Syntax

Bu yazım şekli ise LINQ’ nun sunmuş olduğu metotları kullanarak sorgu oluşturmanızı sağlar. Örnek:

Method söz dizimi temel kullanımı

Method söz diziminde en basit işlemlerden birisi olan Join operasyonu ne kadar da zor görünüyor değil mi? Join, Group By gibi işlemler için Query söz dizimini tercih etmenizi tavsiye ederim.

Artık temelde iki kullanıma da hakim olduğumuza göre sık kullanılan birkaç metot kullanımından bahsedebiliriz.

Where( )

En sık kullanılan sorgu metodudur. Aradığımız şartı Lambda Expression şeklinde vermenizi bekler. IEnumerable tipinde data döner. Örnek:

Where( ) kullanımı

ToList( )

Çoğunlukla Where( ) metodundan sonra kullanılarak gelen dataların List veri tipine çevrilmesi ve RAM’e çekilmesini sağlar. Örnek:

ToList( ) kullanımı

Veri tabanından gelebilecek yüklü dataların tamamını ToList( ) ile RAM’ e almaya çalışmak performansı düşürebilir.

FirstOrDefault( )

Where( ) gibi Lambda Expression şartı ile çalışır fakat liste yerine verilen şarta uyan ilk data’ yı döner. Aranan data bulunamazsa default olarak null dönecektir. Örnek:

FirstOrDefault( ) kullanımı

Bu metodun yanı sıra First( ) metodu bulunmaktadır fakat verilen şarta uygun data bulunamazsa exception fırlatarak programın kırılmasına sebep olur bu sebeple try-catch bloğu ile bu durumu kontrol etmiyorsanız kullanmanızı önermiyorum.

Vakit ayırıp okuduğunuz için teşekkür ederim…

--

--