2010-12-08 8 views
0

Je voudrais connaître la différence entre ces deux syntaxes:Quelle est la différence entre Where (lambda expr.) Et First (lambda expr.) Quand j'ai besoin de choisir le premier élément?

return db.Contacts.First(x => x.ContactID == id) 

que je l'ai utilisé à ce jour jusqu'à ce que je reçois une erreur « séquence ne contient aucun élément ». alors je dois utiliser le ci-dessous à nouveau.

return db.Contacts.Where(x => x.ContactID == id).First(); 

Il doit y avoir une nuance que je ne comprends pas.

Merci de votre aide.

Répondre

2

First est utilisé pour obtenir le premier élément d'une séquence, mais il nécessite également un prédicat pour vous permettre de filtrer la séquence IEnumerable.

Donc First renverra le premier élément d'un IEnumerable avec un ou plusieurs résultats.

First(Predicate) retournera le premier élément de résultats dans un IEnumerable avec 1 résultat ou plus.

S'il y a 0 éléments lors de l'utilisation First vous obtiendrez l'erreur séquence ne contient aucun élément. Si vous vous attendez à 0 résultats, vous devez utiliser FirstOrDefault. FirstOrDefault peut aussi prendre un prédicat aussi bien, à savoir

// Will return null if there are no elements with a matching contact Id 
return db.Contacts.FirstOrDefault(x => x.ContactID == id); 
+0

Pourquoi d'abord renverrait plus de 1 résultat? – Richard77

+0

@ Richard77 - Premier ne donnera jamais plus de 1 résultat. Cela retournera toujours 1 résultat. – GenericTypeTea

+0

Je suis désolé, je n'ai pas bien lu votre réponse. Merci – Richard77

Questions connexes