Actualmente estoy usando una sola consulta en dos lugares para obtener una fila de una base de datos.
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).Single();
La consulta está bien cuando se recupera la fila para colocar datos en los cuadros de texto, pero devuelve un error "La secuencia no contiene elementos" cuando se usa para recuperar la fila para editarla y volver a colocarla en la base de datos. No puedo entender por qué podría encontrar una fila adecuada en una instancia, pero no en otra.
(Usando ASP.NET MVC y LINQ)
Respuestas:
Ponga un punto de interrupción en esa línea, o un Debug.Print antes, en ambos casos y vea qué ID contiene.
fuente
De " Corrección de error de LINQ: la secuencia no contiene elementos ":
Esto también puede ser causado por los siguientes comandos:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
Aggregate()
fuente
ctx.Rosters.First(c => c.RosterAccess == accCode);
<- rotoctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode);
<- TRABAJADOMax
secuencia vacíaLastOrDefault()
eso también puede provocar ese error? Por qué ? Pensé que el "OrDefault" era el puntoPor favor use
porque si en la primera fila del resultado no hay información, esta instrucción va a la información predeterminada.
fuente
Bueno, que hay
ID
aqui? En particular, ¿es una variable local? Hay algunos problemas de alcance / captura, lo que significa que puede ser conveniente utilizar una segunda copia variable, solo para la consulta:También; Si se trata de LINQ-to-SQL, en la versión actual obtendrá un comportamiento ligeramente mejor si utiliza el formulario:
fuente
Esto solucionará el problema,
fuente
Además de todo lo que se ha dicho, puede llamar
DefaultIfEmpty()
antes de llamarSingle()
. Esto asegurará que su secuencia contenga algo y, por lo tanto, evite la InvalidOperationException "La secuencia no contiene elementos". Por ejemplo:fuente
Tuve una situación similar en una función que calcula el promedio.
Ejemplo:
Caso resuelto:
fuente
Motivo del error:
La consulta
from p in dc.BlogPosts where p.BlogPostID == ID select p
devuelve una secuencia.Single()
intenta recuperar un elemento de la secuencia devuelta en el paso 1.Según la excepción : la secuencia devuelta en el paso 1 no contiene elementos.
Single () intenta recuperar un elemento de la secuencia devuelta en el paso 1 que no contiene elementos.
Como
Single()
no puede obtener un solo elemento de la secuencia devuelta en el paso 1, arroja un error.Reparar:
Asegúrate de que la consulta
(from p in dc.BlogPosts where p.BlogPostID == ID select p)
devuelve una secuencia con al menos un elemento.
fuente