La sequenza non contiene eccezioni di elementi in linq senza nemmeno usare Single

Non sto usando Single in LINQ qui sotto, ma sto ancora ricevendo un’eccezione ‘Sequence contains no elements’:

 allNames = StockCollection.Where((s) => s.Name.IndexOf("A") == 0) .Select((s) => s.Name) .Aggregate((namesInfo, name) => namesInfo += ", " + name); 

Questa eccezione arriva quando non ci sono scorte che iniziano con il nome 'A' .

Sembra che un metodo di estensione si aspetti almeno un elemento che soddisfa la condizione ma non è previsto.

Potete per favore suggerire la soluzione migliore per risolvere questo problema?

Grazie in anticipo.

Come ha sottolineato Dennis Traub, il sovraccarico di Aggregate che stai usando genera quell’eccezione quando la sequenza sorgente è vuota.

La soluzione più ovvia consiste nell’utilizzare l’ altro overload di Aggregate che accetta un seed iniziale (si desidera string.Empty ), ma ciò comporterebbe una virgola principale nel risultato da cui si dovrà sbarazzarsi.

( MODIFICA : puoi evitare questo con .DefaultIfEmpty(string.Empty) seguito dal tuo sovraccarico Aggregate esistente. Ciò non produrrebbe una virgola principale.)

In ogni caso, usare Aggregate come quello per unire le stringhe non è una grande idea (produce un algoritmo di Schlemiel the Painter ). Ecco come scriverei la query:

 allNames = string.Join(",", StockCollection.Select(s => s.Name) .Where(name => name.StartsWith("A")); 

In .NET 3.5, avrai bisogno di un ToArray() per materializzare i risultati Where in una matrice.

Utilizzare con seme vuoto.

 new string[]{}.Aggregate("", (a,b)=> a+b ) 

L’utilizzo di Aggregate (func) su una sorgente vuota genera un’eccezione InvalidOperationException.

Vedere la documentazione: http://msdn.microsoft.com/en-us/library/bb548651.aspx