В настоящее время я использую один запрос в двух местах, чтобы получить строку из базы данных.
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).Single();
Запрос хорош при извлечении строки для помещения данных в текстовые поля, но он возвращает ошибку «Последовательность не содержит элементов», когда используется для извлечения строки, чтобы отредактировать ее и вернуть в базу данных. Я не могу понять, почему в одном случае он может найти подходящую строку, а в другом - нет.
(Используя ASP.NET MVC и LINQ)
Ответы:
В обоих случаях поместите точку останова на эту строку или Debug.Print перед ней и посмотрите, какой идентификатор содержит.
источник
Из « Исправление ошибки LINQ: последовательность не содержит элементов »:
Это также может быть вызвано следующими командами:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
Aggregate()
источник
ctx.Rosters.First(c => c.RosterAccess == accCode);
<- сломаноctx.Rosters.FirstOrDefault(c => c.RosterAccess == accCode);
<- РАБОТАЕТMax
пустую последовательностьLastOrDefault()
это тоже может вызвать эту ошибку? Зачем ? Я думал, что «OrDefault» былПожалуйста, используйте
потому что, если в первой строке результата нет информации, эта инструкция переходит к информации по умолчанию.
источник
Ну что
ID
здесь? В частности, это локальная переменная? Есть некоторые проблемы с областью / захватом, которые означают, что может быть желательно использовать вторую копию переменной только для запроса:Также; если это LINQ-to-SQL, то в текущей версии вы получите немного лучшее поведение, если воспользуетесь формой:
источник
Это решит проблему,
источник
Помимо всего прочего, вы можете позвонить
DefaultIfEmpty()
перед тем, как позвонитьSingle()
. Это гарантирует, что ваша последовательность что-то содержит, и тем самым предотвратит InvalidOperationException «Последовательность не содержит элементов». Например:источник
У меня была аналогичная ситуация с функцией, вычисляющей среднее значение.
Пример:
Дело решено:
источник
Причина ошибки:
Запрос
from p in dc.BlogPosts where p.BlogPostID == ID select p
возвращает последовательность.Single()
пытается получить элемент из последовательности, возвращенной на шаге 1.Согласно исключению - последовательность, возвращенная на шаге 1, не содержит элементов.
Single () пытается получить элемент из последовательности, возвращенной на шаге 1, которая не содержит элементов.
Поскольку
Single()
не может получить ни одного элемента из последовательности, возвращенной на шаге 1, возникает ошибка.Fix:
Убедитесь, что запрос
(from p in dc.BlogPosts where p.BlogPostID == ID select p)
возвращает последовательность как минимум с одним элементом.
источник