La secuencia no contiene elementos?
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 al recuperar la fila para poner datos en los cuadros de texto, pero devuelve un error "Sequence contains no elements" 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 apropiada en un caso pero no en otro.
(Utilizando ASP.NET MVC y LINQ)
7 answers
Ponga un punto de interrupción en esa línea, o una depuración.Imprima antes, en ambos casos y vea lo que contiene ID.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-24 19:23:46
Desde " Arreglando el error LINQ: La secuencia no contiene elementos":
Cuando obtienes el error LINQ "Sequence contains no elements", esto es generalmente porque estás usando el comando
First()
oSingle()
en lugar deFirstOrDefault()
ySingleOrDefault()
.
Esto también puede ser causado por los siguientes comandos:
FirstAsync()
SingleAsync()
Last()
LastOrDefault()
LastAsync()
Max()
Min()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-20 11:12:41
Bueno, ¿qué es ID
aquí? En particular, ¿es una variable local? Hay algunos problemas de alcance / captura, lo que significa que puede ser deseable usar una segunda copia de variable, solo para la consulta:
var id = ID;
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == id
select p).Single();
También; si esto es LINQ-to-SQL, entonces en la versión actual se obtiene un comportamiento ligeramente mejor si se utiliza la forma:
var id = ID;
BlogPost post = dc.BlogPosts.Single(p => p.BlogPostID == id);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-08-24 19:24:13
Esto resolverá el problema,
var blogPosts = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p);
if(blogPosts.Any())
{
var post = post.Single();
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-16 00:31:40
Utilice
.FirstOrDefault()
Porque si en la primera fila del resultado no hay información esta instrucción va a la información predeterminada.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-01 01:48:49
Razón 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 step1 que no contiene elementos.
Dado que
Single()
no es capaz de obtener un solo elemento de la secuencia devuelta en el paso 1, lanza un error.
Arreglo:
Asegúrese de que la consulta (from p in dc.BlogPosts where p.BlogPostID == ID select p)
Devuelve una secuencia con al menos un elemento.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 05:53:24
Además de todo lo demás que se ha dicho, puedes llamar DefaultIfEmpty()
antes de llamar Single()
. Esto asegurará que su secuencia contenga algo y, por lo tanto, evitará la excepción InvalidOperationException "Sequence contains no elements". Por ejemplo:
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).DefaultIfEmpty().Single();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-24 02:04:12