2011-01-11 1 views
0

La requête LINQ suivante fonctionne correctement sauf lorsqu'il n'y a aucun résultat à renvoyer. Ensuite, une exception InvalidOperationException est levée.Comment gérer les résultats renvoyés par une requête LINQ?

Quelle est la meilleure façon de gérer cela? Comment puis-je tester l'existence d'un résultat et avancer s'il n'y en a pas? J'ai pensé à un essai, mais j'ai senti qu'il devait y avoir une solution plus élégante.

Dans cet exemple, j'attends seulement l'ID du premier résultat. Il peut y avoir un autre cas où je veux que l'objet entier soit retourné.

var drId = dcDest.drs.Where(dr => dr.ContactID == contactId) 
         .Select(dr => dr.Id).First(); 

int xId = drId; 

Répondre

3

Vous devez utiliser SingleOrDefault().

FirstOrDefault()FirstOrDefault() peut aussi fonctionner mais vous dites qu'il ne devrait y en avoir qu'un seul dans la collection, ce qui fait de 'SingleOrDefault()' le choix le plus approprié (une exception sera levée s'il y en a plusieurs).

Si par contre vous attendez une séquence mais devez gérer le cas où aucun élément n'est retourné, vous pouvez également utiliser DefaultIfEmpty() pour renvoyer une valeur par défaut lorsque la séquence est vide. Voir http://msdn.microsoft.com/en-us/library/bb355419.aspx

Quel comportement voulez-vous quand il est vide? Un identifiant de Zero ou autre chose?

+0

Si le retour est vide, un identifiant de sero est correct. – DenaliHardtail

Questions connexes