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 FirstOrDefaultz 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?