É realmente muito simples: Single
retorna um único item e lança uma exceção se não houver nenhum ou mais de um item. First
devolverá o primeiro item ou jogará quando não houver item. FirstOrDefault
irá retornar o primeiro item ou retornar o valor padrão (que é null
no caso de o tipo fornecido ser um tipo de referência) quando não houver item.
Este é o comportamento que a API deve ter. Observe, entretanto, que a implementação subjacente pode ter um comportamento diferente. Embora o Entity Framework obedeça a isso, um O / RM como LLBLGen também pode retornar null
ao chamar, o First
que é uma coisa muito estranha. Esta foi uma decisão muito estranha (e teimosa) do designer IMO.