Рассмотрим методы расширения IEnumerable 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?