Rozważ metody rozszerzenia IEnumerable SingleOrDefault()
iFirstOrDefault()
Dokumenty MSDN, któreSingleOrDefault
:
Zwraca jedyny element sekwencji lub wartość domyślną, jeśli sekwencja jest pusta; ta metoda zgłasza wyjątek, jeśli w sekwencji jest więcej niż jeden element.
natomiast FirstOrDefault
z MSDN (przypuszczalnie przy używaniu OrderBy()
lub OrderByDescending()
albo wcale),
Zwraca pierwszy element sekwencji
Rozważ kilka przykładowych zapytań, nie zawsze jest jasne, kiedy użyć tych dwóch metod:
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?
Pytanie
Jakie konwencje stosujesz lub sugerujesz , decydując się na użycie SingleOrDefault()
i FirstOrDefault()
w zapytaniach LINQ?