visual studio secuencia elementos contiene c# string linq linq-to-objects sequences

c# - studio - La secuencia no contiene ninguna excepción de elementos en linq sin siquiera usar Single



la secuencia no contiene elementos c# (3)

No estoy usando Single en LINQ a continuación, pero todavía obtengo una excepción de ''La secuencia no contiene elementos'':

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

Esta excepción se produce cuando no hay stock que comience con el nombre ''A'' .

Parece que un método de extensión espera al menos un elemento que satisface la condición, pero eso no se espera.

¿Puede por favor sugerir la mejor solución para resolver esto?

Gracias por adelantado.


Como ha señalado Dennis Traub, la sobrecarga de Aggregate que está utilizando arroja esa excepción cuando la secuencia fuente está vacía.

La solución obvia es usar la otra sobrecarga de Aggregate que acepte una inicial semilla (que desee string.Empty ), pero que resultará en una coma inicial en el resultado del que tendrá que deshacerse.

( EDITAR : puedes esquivar esto con .DefaultIfEmpty(string.Empty) seguido de tu sobrecarga Aggregate existente. Esto no produciría una coma .DefaultIfEmpty(string.Empty) .

En cualquier caso, usar Aggregate así para unir cadenas no es una gran idea (produce un algoritmo de Schlemiel the Painter ). Así es como escribiría la consulta:

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

En .NET 3.5, necesitarás un. ToArray() para materializar los resultados de Where en una matriz.



Utilizar con semilla vacía.

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