Considérez les méthodes d'extension IEnumerable SingleOrDefault()
etFirstOrDefault()
Documents MSDN quiSingleOrDefault
:
Renvoie le seul élément d'une séquence ou une valeur par défaut si la séquence est vide; cette méthode lève une exception s'il y a plus d'un élément dans la séquence.
tandis que FirstOrDefault
de MSDN (probablement lors de l' utilisation d' un OrderBy()
ou OrderByDescending()
ou pas du tout),
Renvoie le premier élément d'une séquence
Considérez quelques exemples de requêtes, il n'est pas toujours clair quand utiliser ces deux méthodes:
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?
Question
Quelles conventions suivez-vous ou suggérez-vous lorsque vous décidez d'utiliser SingleOrDefault()
et FirstOrDefault()
dans vos requêtes LINQ?