Это действительно очень просто: Single
возвращает один элемент и генерирует исключение, если их нет или больше одного элемента. First
вернет первый элемент или выбросит, если его нет. FirstOrDefault
вернет первый элемент или значение по умолчанию ( null
в случае, если данный тип является ссылочным), когда элемент отсутствует.
Это то поведение, которое должен иметь API. Однако обратите внимание, что базовая реализация может иметь другое поведение. В то время как Entity Framework подчиняется этому, O / RM, такой как LLBLGen, также может возвращаться null
при вызове, First
что очень странно. Это было очень странно (и упрямый) решение дизайнера ИМО.