LINQ: quando usar SingleOrDefault vs. FirstOrDefault () com critérios de filtragem
Considere os métodos de extensão IEnumerableSingleOrDefault()
eFirstOrDefault()
Documentos MSDN queSingleOrDefault
:
Retorna o único elemento de uma sequência ou um valor padrão se a sequência estiver vazia; este método lança uma exceção se houver mais de um elemento na sequência.
enquanto queFirstOrDefault
do MSDN (presumivelmente ao usar umOrderBy()
ouOrderByDescending()
ou nenhum de todos),
Retorna o primeiro elemento de uma sequência
Considere um punhado de consultas de exemplo, nem sempre é claro quando usar esses dois métodos:
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?
Questão
Quais convenções você segue ou sugere? ao decidir usarSingleOrDefault()
eFirstOrDefault()
nas suas consultas LINQ?