Single,SingleOrDefault ve First,FirstOrDefault Farkı

Kardel Rüveyda ÇETİN
2 min readDec 2, 2019

--

Sabah bu metodlar arasındaki farkı birazcık karıştırmış olduğumdan dolayı, bir sorun ile karşılaştım. Ancak bu sorun güzel bir şeye vesile oldu ve bu yazıyı yazdım. Eğer konu ile ilgili hiçbir fikriniz yok ise; umarım yeni bir şey öğrenmenize vesile olurum. Zaten var ise de bilginizin pekişmesini temenni ederim . :)

LİNQ sorgularında seçim yapılırken First,FirstOrDefault, Single ve SingleOrDefault metodlarına sıklıkla başvuruyoruz. Bu metodları kullanırken doğru kullanım olmadığı takdirde sorunlar ile karşılaşabiliriz. Bu metodlar arasındaki farkı tam anlamı ile bildiğimiz takdirde bu sorunlardan kurtulmuş oluruz.

Single ve SingleOrDefault Metodu

SingleOrDefault

Çift rakamları içeren int tipinde bir dizimiz olsun. Bu dizinden herhangi bir çift sayı seçilmek istendiğinde Single ve SingleOrDefault metodlarından birini kullanabiliriz.

SingleOrDefault kullanılacaksa;

Dizi içerisinden sadece bir tane çift sayı seçilmek isteniyor ve seçim şartımız sağlanmıyorsa, bu durumda int tipinin varsayılan değeri olan 0(sıfır) döndürülmesi sağlanacak ise SingleOrDefault seçimininin kullanılması gerekir.

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

int number = evenNumbers.SingleOrDefault(n=> n.Equals(1));

Console.Writeline(number);

Dizi içerisinde 1 değeri olmadığı için program çıktısı 0 döndürecektir.

Eğer ;

int number = evenNumbers.SingleOrDefault(n=> n>2);

Console.Writeline(number);

Bu sorguda ise sonuç 2’den büyük olan birden fazla eleman vardır. Birden fazla değer döndüğü için InvalidOperationException hatası verecektir.

Single

Eğer seçimimiz sonucunda sadece bir tane eleman geleceği garanti ise bu durumda Single kullanılabilir. Eğer şart sonucunda; hiçbir eleman dönmez ise veya şartı sağlayan birden falza eleman dönerse; bu durumda hata ile karşılaşılacaktır.

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

int number = evenNumbers.Single (n=> n.Equals(2));

Console.Writeline(number);

Yukarıdaki örnekte şart sağlandığı için çıktı olarak “2” dönecektir.

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

int number = evenNumbers.Single (n=> n.Equals(1));

Console.Writeline(number);

Yukarıdaki örnekte ise 1’e eşit herhangi bir eleman olmadığı için InvalidOperationException istinası fırlatılacaktır.

FirstOrDefault ve First

FirstOrDefault: Bu seçimde de mantık SingleOrDefault ile aynıdır. Ancak seçimde ilk eleman seçilir. Yani eğer dizide 2den büyük bir sayı seçilecekse; bu elemanda 2 den büyük “ilk” eleman seçilir.

First: Mantık Single ile aynıdır. Ancak ilk elaman seçilir

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

int number = 0;

number = evenNumbers.FirstOrDefault(n => n > 8); // Sonuç: 0 ( Çünkü 8’den büyük bir eleman olmadığı için bulamadı ve ilk elemanı alamadı.)

number = evenNumbers.FirstOrDefault(n => n == 2); // Sonuç: 2 ( Çünkü 2’e eşit olan elemanın buldu ve çıktıya yazdı.)

number = evenNumbers.First(n => n == 4); // Sonuç: 4
( Çünkü 4’e eşit olan elemanı buldu ve çıktıya yazdı.)

number = evenNumbers.First(n => n > 3); // Sonuç: 4 (3’ten büyük elemanı buldu ve sıradakini yazdı.)

Kaynakça:
https://www.bayramucuncu.com/single-singleordefault-ve-first-firstordefault-farki/

--

--

Kardel Rüveyda ÇETİN
Kardel Rüveyda ÇETİN

Written by Kardel Rüveyda ÇETİN

Software Development Lead @DogusTeknoloji | Microsoft MVP | Mathematical Engineer | Speaker | Blogger | Founder&Organizer @thecoderverse

Responses (1)