Single,SingleOrDefault ve First,FirstOrDefault Farkı

Bu sabah bu metodlar arasındaki farkı karıştırdığımı fark ettim ve bu da beni bir sorunla karşılaştırdı. Ancak bu sorun, bu yazıyı yazmama vesile oldu. Eğer konu hakkında bilginiz yoksa, umarım yeni bir şey öğrenmenizi sağlarım. Eğer bilginiz varsa da bilgilerinizi pekiştirmenizi temenni ederim. 😊

LINQ sorgularında seçim yapılırken sıklıkla First, FirstOrDefault, Single ve SingleOrDefault metodlarına başvuruyoruz. Bu metodları doğru şekilde kullanmadığımız takdirde bazı hatalarla karşılaşabiliriz. Metodlar arasındaki farkları iyi bildiğimizde bu tür sorunlardan kaçınabiliriz.

Single ve SingleOrDefault Metodları

SingleOrDefault

Çift sayıları içeren bir int dizimiz olduğunu düşünelim. Bu diziden herhangi bir çift sayı seçmek istediğimizde Single veya SingleOrDefault metodlarından birini kullanabiliriz.

Eğer SingleOrDefault kullanılacaksa:

Dizi içerisinden sadece bir tane çift sayı seçilmek isteniyor ve seçim şartı sağlanmıyorsa, bu durumda int tipinin varsayılan değeri olan 0 dönecektir. SingleOrDefault seçimi için örnek kod:

codeint[] evenNumbers = {0, 2, 4, 6, 8};
int number = evenNumbers.SingleOrDefault(n => n.Equals(1));
Console.WriteLine(number); // Çıktı: 0 (Dizide 1 olmadığı için varsayılan değer döndü.)

Eğer şöyle bir seçim yaparsak:

codeint number = evenNumbers.SingleOrDefault(n => n > 2);
Console.WriteLine(number);

Bu sorguda 2‘den büyük birden fazla eleman olduğundan, InvalidOperationException hatası verecektir.

Single

Eğer seçimin sonucunda yalnızca bir eleman geleceği garanti ise Single kullanılabilir. Eğer şart sonucunda hiçbir eleman dönmezse veya birden fazla eleman dönerse hata oluşacaktır.

codeint[] evenNumbers = {0, 2, 4, 6, 8};
int number = evenNumbers.Single(n => n.Equals(2));
Console.WriteLine(number); // Çıktı: 2

Ancak şu örnekte:

codeint number = evenNumbers.Single(n => n.Equals(1));
Console.WriteLine(number);

1’e eşit bir eleman olmadığı için InvalidOperationException hatası alınacaktır.

FirstOrDefault ve First Metodları

FirstOrDefault

Bu metotta da mantık SingleOrDefault ile aynıdır ancak burada seçimde ilk eleman döndürülür. Yani dizide 2‘den büyük bir sayı seçilecekse, 2‘den büyük ilk eleman dönecektir.

First

Single metoduna benzer bir mantık izler; ancak ilk elemanı döndürür.

codeint[] evenNumbers = {0, 2, 4, 6, 8};
int number = 0;

number = evenNumbers.FirstOrDefault(n => n > 8); // Çıktı: 0 (8'den büyük eleman olmadığı için varsayılan değer döndü.)
number = evenNumbers.FirstOrDefault(n => n == 2); // Çıktı: 2 (Dizide 2'ye eşit eleman bulundu.)
number = evenNumbers.First(n => n == 4); // Çıktı: 4 (Dizide 4'e eşit eleman bulundu.)
number = evenNumbers.First(n => n > 3); // Çıktı: 4 (3'ten büyük ilk eleman bulundu.)

Kaynakça

Bayram Üçüncü – Single, SingleOrDefault ve First, FirstOrDefault Farkı

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir