Atualmente, estou usando uma única consulta em dois lugares para obter uma linha de um banco de dados.
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).Single();
A consulta é boa ao recuperar a linha para inserir dados nas caixas de texto, mas retorna um erro "Sequência não contém elementos" quando usada para recuperar a linha para editá-la e colocá-la novamente no banco de dados. Não consigo entender por que ele pode encontrar uma linha apropriada em uma instância, mas não em outra.
(Usando o ASP.NET MVC e LINQ)
Respostas:
Coloque um ponto de interrupção nessa linha ou um Debug.Print antes dele, nos dois casos, e veja qual ID contém.
fonte
Em " Corrigindo o erro LINQ: a sequência não contém elementos ":
Isso também pode ser causado pelos seguintes comandos:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
Aggregate()
fonte
ctx.Rosters.First(c => c.RosterAccess == accCode);
<- quebradoctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode);
<- TRABALHADOMax
sobre uma seqüência vaziaLastOrDefault()
também pode acionar esse erro? Por quê ? Eu pensei que o "OrDefault" era o pontoPor favor, use
porque se na primeira linha do resultado não houver informações, esta instrução passará para as informações padrão.
fonte
Bem, o que está
ID
aqui? Em particular, é uma variável local? Existem alguns problemas de escopo / captura, o que significa que pode ser desejável usar uma segunda cópia variável, apenas para a consulta:Além disso; se for LINQ-to-SQL, na versão atual, você terá um comportamento um pouco melhor se usar o formulário:
fonte
Isto resolverá o problema,
fonte
Além de tudo o que foi dito, você pode ligar
DefaultIfEmpty()
antes de ligarSingle()
. Isso garantirá que sua sequência contenha algo e, assim, evite a InvalidOperationException "Sequência não contém elementos". Por exemplo:fonte
Eu tive uma situação semelhante em uma função que calcula a média.
Exemplo:
Caso resolvido:
fonte
Motivo do erro:
A consulta
from p in dc.BlogPosts where p.BlogPostID == ID select p
retorna uma sequência.Single()
tenta recuperar um elemento da sequência retornada na etapa1.Conforme a exceção - A sequência retornada na etapa 1 não contém elementos.
Single () tenta recuperar um elemento da sequência retornada na etapa 1 que não contém elementos.
Como
Single()
não é possível buscar um único elemento da sequência retornada na etapa 1, gera um erro.Consertar:
Verifique se a consulta
(from p in dc.BlogPosts where p.BlogPostID == ID select p)
retorna uma sequência com pelo menos um elemento.
fonte