I am not using Single
in LINQ below, but I am still getting a \'Sequence contains no elements\' exception:
allNames = StockCollection.Where((s)
As Dennis Traub has pointed out, the overload of Aggregate
you are using throws that exception when the source sequence is empty.
The obvious fix is to use the other overload of Aggregate that accepts an initial seed (you want string.Empty
), but that would result in a leading comma in the result which you'll have to get rid of.
(EDIT: You can dodge this with .DefaultIfEmpty(string.Empty)
followed by your existing Aggregate
overload. This wouldn't produce a leading comma.)
In any case, using Aggregate
like that to join strings isn't a great idea (produces a Schlemiel the Painter's algorithm). Here's how I would write the query:
allNames = string.Join(",", StockCollection.Select(s => s.Name)
.Where(name => name.StartsWith("A"));
In .NET 3.5, you'll need a .ToArray()
to materialize the Where
results into an array.
Use with empty seed.
new string[]{}.Aggregate("", (a,b)=> a+b )
Using Aggregate(func) on an empty source throws an InvalidOperationException.
See documentation: http://msdn.microsoft.com/en-us/library/bb548651.aspx