.NET 11 ile LINQ'e FullJoin geliyor: tam dış birleşim artık hazır
.NET 11 ile gelen FullJoin metodu, eşleşen çiftleri ve iki taraftaki eşleşmeyen satırları (Outer, Inner) tuple'ları olarak döndürüyor. Join, LeftJoin, RightJoin ve GroupJoin için sonuç seçici almayan aşırı yüklemeler de eklendi. Özellik henüz .NET 11 RC2 aşamasında olduğu için son sürümden önce ayrıntılar değişebilir.
Kilit noktalar
- FullJoin, eşleşen çiftleri ve iki taraftan eşleşmeyen satırları (Outer, Inner) tuple'ları olarak döndürür.
- Join, LeftJoin ve RightJoin, sonuç seçici almadan tuple üreten aşırı yüklemeler kazandı.
- GroupJoin'in sonuç seçicisiz aşırı yüklemesi IGrouping<TOuter, TInner> döndürür; dış elemana g.Key ile erişilir.
- Değer tipli elemanlarda eksik taraf default(T) olur; gerçek sıfır ile eksik kaydı ayırmak için nullable tip kullanın.
- Eşleşmeyen sağ taraf satırları sol satırlardan sonra eklenir; belirli bir sıra gerekiyorsa sonucu sıralayın.
- FullJoin .NET 11 SDK gerektirir; .NET 10 SDK'da CS1061 derleme hatası alınır.
LINQ yıllardır tam dış birleşim (full outer join) sunmuyordu; geliştiriciler bunu genelde DefaultIfEmpty ile yazılmış bir sol birleşim ve sağda kalan satırlar için ikinci bir sorguyla kuruyordu. .NET 11, FullJoin metoduyla bu boşluğu kapatıyor. Metot iki dizi, anahtar seçiciler ve isteğe bağlı bir eşitlik karşılaştırıcısı alır; eşleşen her çifti ve iki taraftan eşleşmeyen elemanları döndürür. Eksik taraf default değeriyle gelir, referans tiplerde bu null olur.
Sürümle birlikte Join, LeftJoin ve RightJoin için sonuç seçici almayan aşırı yüklemeler de geliyor; bunlar (Outer, Inner) tuple'ları üretir. GroupJoin'in yeni aşırı yüklemesi ise IGrouping döndürür. Dikkat edilmesi gereken noktalar var: değer tipleri eksik tarafı sıfır gibi gösterir, null anahtarlar eşleşmez ve yinelenen anahtarlar satır sayısını çarpar. API Enumerable, Queryable ve AsyncEnumerable üzerinde çalışıyor, ancak .NET 11 SDK gerektiriyor ve bu SDK hâlâ release candidate aşamasında.
Gerçek dünyada kullanımı
- Sistem stoğunu fiziksel sayımla karşılaştırıp eşleşen, eksik ve fazla kalemleri tek sorguda listelemek
- CRM dışa aktarımı ile faturalama listesini eşleştirip yalnızca bir tarafta bulunan kayıtları bulmak
- IQueryable sorgularında FullJoin destekleyen bir sağlayıcıyla iki kaynağı veritabanı tarafında birleştirmek
Neden önemli
Eski iki sorgulu mutabakat kodu tek bir okunabilir çağrıya ve tek bir ortak anahtar karşılaştırıcısına iner. Nihai sürüm çıkmadan önce yeni API'yi .NET 11 SDK üzerinde test etmekte fayda var.