Séquence contient plus d'un élément - SingleOrDefault de ne pas aider les
J'ai la ligne ci-dessous, mais toujours obtenir une exception "Séquence contient plus d'un élément"
Details rd = this.db.Details.SingleOrDefault(x => x.TId == Id && x.TypeId == TypeId);
J'espérais que SingleOrDefault permettrait d'éviter que l'exception.
FirstOrDefault?
OriginalL'auteur StackTrace | 2014-03-27
Vous devez vous connecter pour publier un commentaire.
SingleOrDefault
renvoie une UNIQUE élément ou la valeur null si aucun élément n'est trouvé. Si 2 éléments sont présents dans votre Énumération, alors il lève l'exception que vous voyez. Tout comme Highlander... avec un Seul il ne peut y avoir qu'un seul.FirstOrDefault
renvoie la PREMIÈRE élément qu'il trouve ou la valeur null si aucun élément n'est trouvé. donc si il y a 2 éléments qui correspondent à vos prédicat le second est ignoré.En supposant que vous n'avez pas de soins si il y a des correspondances multiples et que vous souhaitez seulement la première ou la valeur null si aucune correspondance n'est trouvée... alors vous voudrez probablement le suivant...
Noter que ces deux méthodes retournent un élément qu'ils ne diffèrent en ce qu'ils font après de trouver une correspondance.
First
arrête de regarder ce point et renvoie ce qu'il a trouvé,Single
continue à vérifier le reste de la liste pour s'assurer que il n'y a pas plus de matches. LeOrDefault
partie détermine de quoi il en retourne si aucune correspondance n'est trouvée.SingleOrDefault
ouFirstOrDefault
renvoie la valeur null si aucune valeur n'est trouvée, mais si vous venez d'utiliserSingle
ouFirst
ensuite, il DOIT trouver un match ou il va lever une exception.EDIT: Bon point de Steve
Depuis
First
retourne le premier élément que vous pouvez avoir besoin d'utiliser unOrderBy
afin de s'assurer que l'élément que vous voulez est en effet la première. Par exemple, supposons que votre objet a une UpdateDate propriété et que vous vouliez l'objet le plus récent UpdateDate...OriginalL'auteur Kevin
Dans le cas où vous rencontrez une liste, de convertir la liste de IEnumerable liste, alors vous pouvez faire usage de FirstOrDefault méthode
OriginalL'auteur Arun Prasad E S