我目前在两个地方使用一个查询从数据库中获取一行。
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).Single();
当检索行以将数据放入文本框时,该查询很好,但当用于检索行以编辑它并将其放回数据库时,它返回错误“Sequence contains no elements”。我不明白为什么它可能在一个示例中找到合适的行,但在另一个示例中找不到。
(使用ASP.NET MVC和LINQ)
7条答案
按热度按时间icomxhvb1#
从“Fixing LINQ Error: Sequence contains no elements“开始:
当您收到LINQ错误“序列不包含元素”时,这通常是因为您使用的是
First()
或Single()
命令,而不是FirstOrDefault()
和SingleOrDefault()
。这也可能是由以下命令引起的:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
2ledvvac2#
请使用
因为如果在结果的第一行中没有info,则该指令转到默认info。
8ulbf1ek3#
那么,这里
ID
是什么?特别是,它是一个局部变量吗?有一些范围/捕获问题,这意味着可能需要使用第二个变量副本,只是为了查询:另外,如果这是LINQ-to-SQL,那么在当前版本中,如果使用以下形式,您会得到稍微好一点的行为:
mfuanj7w4#
除了前面提到的所有内容之外,您还可以在调用
Single()
之前调用DefaultIfEmpty()
。这将确保您的序列包含一些内容,从而避免InvalidOperationException“Sequence contains no elements”。例如:t8e9dugd5#
这将解决问题,
mpbci0fu6#
我在一个计算平均值的函数上遇到过类似的情况。
示例:
案件解决日期:
rseugnpd7#
错误原因:
1.查询
from p in dc.BlogPosts where p.BlogPostID == ID select p
返回一个序列。Single()
尝试从步骤1返回的序列中检索元素。1.根据异常-步骤1中返回的序列不包含元素。
1.由于
Single()
无法从步骤1返回的序列中获取单个元素,因此它抛出错误。修复:
确保查询
(from p in dc.BlogPosts where p.BlogPostID == ID select p)
返回至少包含一个元素的序列。