SORU
16 Kasım 2009, PAZARTESİ


SERİ: SingleOrDefault vs FirstOrDefault() filtreleme kriterleri ile

IEnumerable uzatma yöntemleri SingleOrDefault() FirstOrDefault() düşünün

MSDN documents that SingleOrDefault:

Döner bir dizi, ya da eğer sıra boşsa varsayılan değer yegane unsur; bu yöntem ise sırayla birden fazla öğe varsa, bir istisna atar.

FirstOrDefault from MSDN muhtemelen OrderBy() OrderByDescending() ya da hiç bir kullanarak (), oysa

Döndürür bir dizinin ilk elemanı

Örnek sorgular bir avuç düşünün, bu iki yöntem ne zaman kullanılmalı: her zaman açık değildir

var someCust = db.Customers
.SingleOrDefault(c=>c.ID == 5); //unlikely(?) to be more than one, but technically COULD BE

var bobbyCust = db.Customers
.FirstOrDefault(c=>c.FirstName == "Bobby"); //clearly could be one or many, so use First?

var latestCust = db.Customers
.OrderByDescending(x=> x.CreatedOn)
.FirstOrDefault();//Single or First, or does it matter?

Soru

Kuralları takip veya ne önerirsinizsenin SERİ SingleOrDefault() FirstOrDefault() kullanmaya karar sorguladığında?

CEVAP
21 Ocak 2011, Cuma


Eğer sonuç verir 0 kayıt kümesi:

  • SingleOrDefault tipi (int, örneğin, varsayılan 0) için varsayılan değerini döndürür
  • FirstOrDefault türü için varsayılan değeri döndürür

Eğer sonuç kümesi 1 Kayıt verir:

  • SingleOrDefault o kaydı döndürür
  • FirstOrDefault o kaydı döndürür

Sonuç kümesi döndürür birçok kayıtları:

  • SingleOrDefault bir istisna atar
  • FirstOrDefault ilk kaydı döndürür

Sonuç:

Eğer bir istisna varsa, sonuç kümesi çok sayıda kayıt içeriyorsa atılmış olmak istiyorsanız, SingleOrDefault kullanın.

Eğer sen her zaman 1 Kayıt sonuç kümesini içerir ne olursa olsun istiyorsanız, FirstOrDefault kullanın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boniver

    boniver

    17 NİSAN 2006
  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • sonia989

    sonia989

    26 EKİM 2006