Séquence contient pas d'éléments d'exception dans linq, sans même l'aide de la Seule
Je ne suis pas à l'aide de Single
dans LINQ ci-dessous, mais je suis toujours en faire une "Séquence contient pas d'éléments" exception:
allNames = StockCollection.Where((s) => s.Name.IndexOf("A") == 0)
.Select((s) => s.Name)
.Aggregate((namesInfo, name) => namesInfo += ", " + name);
Cette exception vient quand il n'y a pas de stock à partir avec le nom 'A'
.
Il semble qu'une méthode d'extension s'attend à au moins un élément satisfait à la condition, mais ce n'est pas prévu.
Pouvez-vous s'il vous plaît suggérer la meilleure solution pour résoudre ce problème?
Merci d'avance.
Vous devez vous connecter pour publier un commentaire.
Que Dennis Traub l'a souligné, la surcharge de
Aggregate
vous êtes à l'aide de lance de cette exception, lorsque la source de la séquence est vide.La correction évidente est l'utilisation de la d'autres surcharge de
Agrégation
qui accepte une graine initiale (vous voulezstring.Empty
), mais qui seraient le résultat d'un leader de la virgule dans le résultat qui vous aurez à se débarrasser de.(MODIFIER: Vous pouvez esquiver cette avec
.DefaultIfEmpty(string.Empty)
suivie par votreAggregate
de surcharge. Ce ne serait pas produire un leader de la virgule.)Dans tous les cas, à l'aide de
Aggregate
comme ça à rejoindre les cordes n'est pas une bonne idée (produit une Schlemiel l'algorithme du Peintre). Voici comment j'allais écrire la requête:Dans .NET 3.5, vous aurez besoin d'une .
ToArray()
pour matérialiser laWhere
résultats dans un tableau.null
dans ce cas), mais je ne le souhaite pas.DefaultIfEmpty
cela fonctionne bien avec des exemples plus complexes de chaînes.Utilisation vides de semences.
À l'aide d'Agrégation(func) sur une zone vide de la source déclenche une exception InvalidOperationException.
Voir la documentation: http://msdn.microsoft.com/en-us/library/bb548651.aspx