LinQ kullanırken First() mü Single() mı?

0 views
Skip to first unread message

firhus.com yönetim

unread,
Apr 1, 2012, 4:40:12 AM4/1/12
to firhus | Mitolojik Yazılım Merkezi
Merhaba;

Linq kullanırken tek bir eleman çektiğimiz zaman hem first hemde
single olması kafa karıştırıcı değil mi ? Aslında buna verilen cevap
"birisi ilk eleman birisi tek eleman" şeklinde olur. Aslında bu tanım
yeterince açıklayıcı ama ben biraz daha detaya inerek anlatmak
istedim.

Öncelikle bilmeniz gereken şu :

Single : Tek bir eleman döndürdüğünden emin olduğunuz sorgular için
kullanın, eğer sorgu birden fazla eleman döndürecek olursa hata
oluşacaktır.

SingleOrDefault : Hiç eleman dönmez ise generic tipin varsayılan
değerini ya da nothing değeri dönecektir. Yine birden fazla değer
varsa hata verir.

First : Dönen sorgu sonucunun ilk elemanını döndürecektir. Bu tek bir
string ise char dizisi olarak kabul edilip ilk karakteri alınır.

FirstOrDefault : Hiç eleman dönmez ise generic tipin varsayılan
değerini ya da nothing değeri dönecektir.

Biraz daha detaya inecek olursak first() fonksiyonu çalışırken şu
adımları izler:

1- Tampon bir list , sonuç kümesi (IEnumerable) ile doldurulur

2- Tampon listenin Nothing olup olmadığına bakılır

3- Nothing değil ise :Tampon listenin ilk elemanı 0 index numarası
çağırılarak gönderilir

4- Nothing ise : Bu küme list'e aktarılamıyordur bu yüzden bir
IEnumerator nesnesine gönderilir ve bir sonraki kayıt alınmaya
çalışılır.

5- Eğer hala bir şey döndürülmemiş ise first için bir kayıt yok
hatası,FirstOrDefault için ise nothing döndürülür.


Birde single() 'ı incelersek :

1- Tampon bir list , sonuç kümesi (IEnumerable) ile doldurulur

2- Tampon listenin Nothing olup olmadığına bakılır

3- Nothing değil ise Listenin eleman sayısına bakılır :

4- 0 ise eleman yok hatası.

5- 1 ise listenin 0 index numaralı elemanı döndürülür

6- Nothing ise Bu küme list'e aktarılamıyordur bu yüzden bir
IEnumerator nesnesine gönderilir

7- bir sonraki kayıt alınamıyorsa kayıt yok hatası döndürülür

8- bir sonraki kayıt tampon bir değişkene alınır

9- bir sonraki kayıt alınamıyorsa alınan tampon sonuç olarak
döndürülür

10- Eğer hala bir şey döndürülmemiş ise first için bir kayıt yok
hatası,SingleOrDefault için ise nothing döndürülür.

Görüldüğü üzere single'ın performans için bir faydası yok, hatta
fazladan bir kaç karşılaştıma yapılmakta.

Eğer tek kayıt dönmesi gereken bir sorgudan birden fazla dönmesini
yakalamak istediğiniz bir durum olursa kolaylıkla try bloğu içerisind
tanımlayabilirsiniz.Ama birden fazla da dönse ilk kayıt sizin için
yeterli oluyorsa First / FirstOrDefault kullanın.

www.firhus.com
Reply all
Reply to author
Forward
0 new messages