C# Advanced LINQ Query Expressions

Merhaba arkadaşlar,

Bir önceki yazımda C# LINQ Mimarsine giriş yapıp LINQ Mimarisi ile kullanılan yeni özelliklere hakkında bilgi edindik. (LINQ Mimarisi ve Yeni C# Özellikleri yazıma buradan ulaşabilirsiniz)

Bu yazımda Gelişmiş LINQ Sorgu İfadeleri (Advanced LINQ Query Expressions) neler, onları ele alıp örnekler üzerinden pekiştiriyor olacağız.

Gelişmiş LINQ ifadelerine başlamadan önce bilmemiz gereken bazı bilgiler;

  • Bir LINQ ifadesi her zaman from deyimi ile başlar.
  • from deyimi ile sorgulanacak kaynak belirtilir.
  • select deyimi ile genellikle sonuçlandırılır.
  • İlk from deyimi ile opsiyonel olarak let, yine from ya da where deyimleri gelebilir.
  • Birden fazla from kullanarak birleştirme yapılabilir.
  • where deyimi filtreleme yapmak için kullanılır.
  • let deyimi sorgu içinde değişken tanımlamak için kullanılır.
  • son olarak into deyimi kullanılarak sql’deki gibi iç içe sorgu yapılabilir.
AçıklamaMetotlar
Kısıtlama Operatörleri (Restriction Operators)Where
İzdüşümü Operatörleri (Projection Operators)Select, SelectMany
Gruplama Operatörleri ( Grouping Operators)Group
Sırlama Operatörleri (Ordering Operators)OrderBy, ThenBy, Reverse
Bölümleme Operatörleri (Partitioning Operators)Take, Skip, TakeWhile, SkipWhile
Dönüştürme Operatörleri (Conversion Operators)ToArray, ToList, ToDictionary, OfType
Küme Operatörleri ( Set Operators)Distinct, Union, Intersect, Except
Group Operatörleri (Aggregate Operators)Count, Sum, Min, Max, Average, Fold
Ölçüm Operatörleri (Quantifier Operators)Any, All
Eleman Operatörleri ( Element Operators)First, FirstOrDefault, ElementAt, Single, SingleOrDefault
Ve Diğer OperatörlerConcat, SequenceEqual

Genişletilmiş metotlara aşağıdaki örnek sınıfları esas alınarak işlenecektir.

İzdüşümü Operatörleri (Projection Operators)

Elde edilen nesneyi daha sonra kullanılacak özelliklerden oluşan yeni bir forma dönüştürme işlemidir.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
Selectyeni formda oluşan bir nesneselect
SelectManybirden fazla from ile oluşan yeni bir nesnebirden fazla from 

Bölümleme Operatörleri (Partitioning Operators)

Elde edilen nesneyi daha sonra kullanılacak özelliklerden oluşan yeni bir forma dönüştürme işlemidir.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
TakeBelli sayıdaki elemanları alır
Skipelemanları belli sayı kadar atlatır
TakeWhileBelli koşula göre elemanları alır
SkipWhileBelli koşula göre elemanları atlatır

Sırlama Operatörleri (Ordering Operators)

Bir veya daha fazla elemanları belirtilen işleme göre artan veya azalana göre sıralar.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
OrderByElemanları artan sırada sıralarorderby
OrderByDescendingElemanları azalan sırada sıralarorderby … descending
ThenByElemanları birden fazla kritere göre artan sırada sıralarorderby …, …
ThenByDescendingElemanları birden fazla kritere göre azalan sırada sıralarorderby …, … descending
ReverseKoleksiyondaki elemanları tersine çevirir

Gruplama Operatörleri ( Grouping Operators)

Her bir gruptaki elemanların ortak bir öznitelik paylaşabilmesi için verileri gruplara ayırma işlemidir.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
GroupByOrtak bir özniteliği paylaşan öğeleri gruplargroup…by veya group….by…into…
ToLookupElemanları anahtara göre Lookup nesnesine (one to many ilişkisine dayalı) ekler

Küme Operatörleri ( Set Operators)

Koleksiyondaki elemanları koşula göre sonuç kümesi oluşturmak için kullanılır.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
DistinctYinelenen değerleri koleksiyondan çıkarır.
ExceptKüme farkını döner. (İkinci koleksiyonda olmayan elemanlar)
Intersectİki koleksiyondaki kesişen elemanları döner.
Unionİki koleksiyonu birleştirir.

Dönüştürme Operatörleri (Conversion Operators)

Herhangi bir LINQ ifadesinin türünü değiştirir.

AsEnumerable, AsQueryable, ToArray, ToDictionary, ToList, Tolookup …

Eleman Operatörleri ( Element Operators)

Koleksiyon içindeki tek bir elemana ulaşmak için kullanılır.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
ElementAtBelirtilen dizindeki elemanı döner
ElementAtDefaultBelirtilen dizindeki elemanı döner veya varsayılan değeri döndürür.
FirstKoleksiyondaki ilk elemanı döner veya koşulu yerine getiren ilk elemanı
FirstOrDefaultKoleksiyondaki ilk elemanı döner veya koşulu yerine getiren ilk elemanı döner. Böyle bir koşul yok ise varsayılan elemanı döndürür.
LastKoleksiyondaki son elemanı veya koşulu yerine getiren son elemanı döner.
LastOrDefaultKoleksiyondaki son elemanı veya koşulu yerine getiren son elemanı döner. Böyle bir koşul yok ise varsayılan elemanı döndürür.
SingleKoleksiyondan tek elemanı döner veya koşulu sağlayan tek elemanı döner. Döndürülecek eleman yoksa veya birden fazla eleman var ise InvalidOperationException hatası fırlatır.
SingleOrDefaultKoleksiyondan tek elemanı döner veya koşulu sağlayan tek elemanı döner. Döndürülecek eleman yoksa varsayılan değeri döner. Birden fazla eleman var ise InvalidOperationException hatası fırlatır

Ölçüm Operatörleri (Quantifier Operators)

Koleksiyondaki elemanların koşulu yerine getirip getirmediğini ifade etmek için kullanılır.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
AllTüm elemanlar koşulu sağlayıp sağlanamadığı belirler.
AnyKoleksiyondaki elemanların bir durumu karşılayıp karşılamadığını belirler.
ContainsKoleksiyondaki elemanlar belli bir elemanı içerip içermediğini belirler.

Birleştirme Operatörleri (Concatenation Operators)

İki diziyi arka arkaya birleştirmek için kullanılır.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
ConcateBir dizi oluşturmak için iki diziyi birleştirir.

Eşitlik Operatörleri (Equality Operators)

İki koleksiyonun bütün elemanları karşılıklı olarak birbirine eşit olup olmadığını kontrol etmek için kullanırız.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
Sequenceequalİki dizinin eşit olup olmadığını, tüm elemanların eşit olup olmadığını kontrol eder

Birleştirme Operatörleri (Join Operators)

Birbirleriyle ilişkilendirmiş iki veri kümesi üzerinde join operatörü kullanılarak ortak öznitelik paylaşan nesnelerle ilişkilendirilmesi için kullanılır.

YöntemAçıklamaC# Sorgu İfade Sözdizimi
JoinSeçilmiş anahtara göre iki diziyi birleştirirjoin….in….on….equals….
GroupJoinSeçilmiş anahtara göre iki diziyi birleştirir ve gruplarjoin….in….on….equals….into…

Bu yazımda Gelişmiş LINQ Sorgu ifadeleri (Advanced LINQ Query Expressions) hakkında edindiğim bilgileri paylaşmaya çalıştım. Umarım faydalı olmuştur 🙂

Bir sonraki yazımda görüşmek üzere 🙂

Leave a Comment