Cela dépend de votre goût pour la syntaxe des requêtes linq. Vous pouvez utiliser directement les méthodes d'extension, par exemple :
var item = Items.First(i => i.Id == 123);
Et si vous ne voulez pas lancer une erreur si la liste est vide, utilisez FirstOrDefault
qui renvoie la valeur par défaut pour le type d'élément ( null
pour les types de référence) :
var item = Items.FirstOrDefault(i => i.Id == 123);
if (item != null)
{
// found it
}
Single()
et SingleOrDefault()
peut également être utilisé, mais si vous lisez à partir d'une base de données ou quelque chose qui garantit déjà l'unicité, je ne m'en soucierais pas car il doit scanner la liste pour voir s'il y a des doublons et les lancer. First()
et FirstOrDefault()
s'arrêtent au premier match, ils sont donc plus efficaces.
De la First()
et Single()
famille, voilà où ils lancent :
-
First()
- jette si vide/non trouvé, ne jette pas si dupliqué
-
FirstOrDefault()
- renvoie la valeur par défaut si vide/non trouvé, ne lance pas si dupliqué
-
Single()
- rejette si vide/non trouvé, rejette si un duplicata existe
-
SingleOrDefault()
- renvoie la valeur par défaut si vide/non trouvé, lance la procédure si un double existe