Gestion des exceptions dans une expression LINQ
J'ai une LINQ simple expression comme:
newDocs = (from doc in allDocs
where GetDocument(doc.Key) != null
select doc).ToList();
Le problème est, GetDocument() peut lever une exception. Comment puis-je ignorer tous les doc-éléments, lorsqu'GetDocument(doc.La clé) == null ou lève une exception?
Le même code dans la vieille école ressemble:
foreach (var doc in allDocs)
{
try
{
if (GetDocument(doc.Key) != null) newDocs.Add(doc);
}
catch (Exception)
{
//Do nothing...
}
}
source d'informationauteur Rocco Hundertmark
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr que c'est possible à l'aide de la requête de compréhension de la syntaxe, sauf par le biais de certains baroque atrocité comme ceci:
Une extension linq peut être écrit à sauter tous les éléments qui provoquent une exception. Voir ce post stackoverflow
Exemple:
de poster ici au cas où quelqu'un d'autre trouve cette réponse en premier.
Vous pouvez déplacer l'ensemble de la
try catch
bloc etGetDocument
appel à une autre méthodeet ensuite utiliser cette fonction dans votre requête
Cela permet de garder votre requête concis et facile à lire.
Avez-vous essayé de l'Expression.TryCatch
TryExpression msdn
Écrire votre propre méthode.
MyGetDocument( )
qui va gérer l'exception et de l'appeler à partir de LINQ.