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.
Usar Aggregate (func) en una fuente vacía arroja una InvalidOperationException.
Consulte la documentación: http://msdn.microsoft.com/en-us/library/bb548651.aspx
Utilizar con semilla vacía.
new string[]{}.Aggregate("", (a,b)=> a+b )