Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
LINQ Nedir? C# ile Query Syntax ve Method Syntax
LINQ'in döngülerle yazdığımız sorgulara getirdiği değişiklik, onu mümkün kılan C# 3.0 özellikleri, query syntax'ın derleyicide method çağrısına nasıl çevrildiği, hangi yazımı ne zaman seçmek gerektiği ve ilk tuzaklar.
LINQ Deferred Execution: Sorgu Ne Zaman Çalışır? IEnumerable ve IQueryable
LINQ sorgusunun tanımlandığında değil dolaşıldığında çalışması, element element streaming, hemen çalışan ve non-streaming operatörler, çoklu enumeration'ın bedeli ve Func ile expression tree üzerinden IEnumerable ile IQueryable farkı.
LINQ ile Filtreleme ve Sıralama: Where, OrderBy, ThenBy ve Reverse
Where ve index overload'u, ikinci OrderBy'ın ilkini neden sildiği, ThenBy ile çok key'li sıralama, OrderBy'ın stable, List.Sort'un unstable oluşu, kültüre bağlı string sıralaması ve Reverse ile OrderByDescending farkı.
LINQ ile Projection: Select, SelectMany ve Anonymous Type
Select ile bire bir, SelectMany ile bire çok projection; DTO'ya dönüştürmek, result selector ile üst bilgiyi korumak, kartezyen çarpım, anonymous type'ın eşitlik ve with kuralları, method dışına tuple mı record mı.
LINQ Element Operatörleri: First, Last, Single, ElementAt ve OrDefault
First, Last, Single ve ElementAt ailesi ile OrDefault kardeşleri; value type'larda 0'ın 'bulunamadı' ile karışması, .NET 6'nın varsayılan değer parametresi ve Index overload'ları, First ile Single arasındaki niyet farkı ve nullable uyarıları.
LINQ Partitioning: Take, Skip, TakeWhile, Chunk ve Take(Range)
TakeWhile neden bir filtre değildir, Skip ve Take ile doğru sayfalama ve sıralamanın sessiz kuralı, TakeLast/SkipLast'ın sona kadar okuması, .NET 6 ile gelen Take(Range) ve array slice farkı, Chunk ile paketlere bölmek ve partitioning operatörlerinin kaynaktan tam olarak ne kadar okuduğu.
LINQ Aggregation Operatörleri: Count, Sum, Average, Min, Max, Aggregate ve MinBy/MaxBy
Boş sequence'te Sum neden 0, Max neden exception döner ve nullable selector ile DefaultIfEmpty çözümleri. Count ile .NET 6 TryGetNonEnumeratedCount, Average'ın dönüş tipi, Sum'ın checked overflow'u, değer yerine element döndüren MinBy/MaxBy, Aggregate'in üç overload'u ve aynı sorguyu kaç kez enumerate ettiğin.
LINQ Gruplama: GroupBy, IGrouping ve ToLookup
GroupBy'ın deferred, ToLookup'ın immediate çalışması ve bunun sonuca etkisi. IGrouping'in key ve element'leri, dokümante edilmiş grup sırası, gruplayıp özetlemek, element ve result selector overload'ları, query syntax'ta group by into, composite key'ler, ToLookup'ın olmayan key davranışı, comparer ile gruplama ve GroupBy'ın kaynağı buffer'laması.
LINQ Set İşlemleri: Distinct, Union, Intersect, Except ve DistinctBy
Distinct'in eşitliği nereden aldığı ve eşitliği olmayan class'ta neden hiçbir şey silmediği. Union, Intersect ve Except'in sonucu tekilleştirmesi, Concat ve Where ile farkları, dokümante edilen sıra, comparer ile karşılaştırma, .NET 6 DistinctBy/UnionBy ve key listesi alan IntersectBy/ExceptBy, CS0411 hatası, HashSet ve deferred execution.
LINQ Join ve GroupJoin: Inner Join, Composite Key ve Left Join Pattern'ı
Join'in inner join olarak eşleşmeyeni düşürüp çoklu eşleşmeyi çoğaltması ve dokümante edilen sırası. Query syntax'ta equals'ın yönü ve CS1937/CS1938, composite key ve CS1941, GroupJoin ile hiyerarşik sonuç, GroupJoin + DefaultIfEmpty ile left join pattern'ı ve null tuzağı, çoklu join ve Join'in lookup ile n + m'de çalışması.
LINQ Any, All, Contains, SequenceEqual ve Dönüşüm Operatörleri
All'ın boş sequence'te neden true döndüğü ve doğrulamada Any ile birlikte kullanmak, Any'nin ilk element'te durması ve Count() > 0 farkı, Contains ve record eşitliği, SequenceEqual ve collection taşıyan record tuzağı, ToList/ToArray/ToHashSet ile snapshot, ToDictionary'de tekrar eden key ve Cast ile OfType farkı.
LINQ'te Kendi Operatörünü Yazmak: Extension Method ve yield return
LINQ operatörünün aslında bir extension method olduğu; yield return ile lazy ve streaming operatör yazmak, argüman doğrulamasını iterator'den ayırmak, immediate operatörler, erken bırakılan enumeration'da finally, IQueryable için Expression alan operatör ve BCL ile isim çakışması.