Рассмотрим методы IEnumerable extension SingleOrDefault()
и FirstOrDefault()
Документы MSDN, которые SingleOrDefault
:
Возвращает единственный элемент последовательности или значение по умолчанию, если последовательность пуста; этот метод генерирует исключение, если в последовательности содержится более одного элемента.
тогда как FirstOrDefault
из MSDN (предположительно при использовании OrderBy()
или OrderByDescending()
или вообще ничего),
Возвращает первый элемент последовательности
Рассмотрим несколько примеров запросов, не всегда понятно, когда использовать эти два метода:
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?
Вопрос
Какие соглашения вы придерживаетесь или предлагаете при принятии решения использовать SingleOrDefault()
и FirstOrDefault()
в ваших запросах LINQ?