序列不包含元素?
我目前在两个地方使用单个查询来获取数据库中的一行。
BlogPost post = (from p in dc.BlogPosts where p.BlogPostID == ID select p).Single(); 当检索将数据放入文本框的行时,查询很好,但在用于检索行以编辑并将其放回数据库时,将返回错误“Sequence contains no elements”。 我不明白为什么它会在一个实例中find合适的行,而不是另一个。
(使用ASP.NET MVC和LINQ)
在这一行上放置一个断点,或者在它之前放置一个Debug.Print,在这两种情况下,看看包含了什么ID。
从“ 修复LINQ错误:序列不包含任何元素 ”:
当你得到LINQ错误“Sequence contains no elements”时,通常是因为你使用的是
First()或Single()命令而不是FirstOrDefault()和SingleOrDefault()。
这也可能是由以下命令引起的:
-  FirstAsync()
-  SingleAsync()
-  Last()
-  LastOrDefault()
-  LastAsync()
-  Max()
 那么这里的ID是什么? 特别是,它是一个局部variables? 有一些范围/捕获问题,这意味着可能需要使用第二个variables副本,仅用于查询: 
 var id = ID; BlogPost post = (from p in dc.BlogPosts where p.BlogPostID == id select p).Single(); 
也; 如果这是LINQ到SQL,那么在当前版本中,如果使用表单,则会获得稍好的行为:
 var id = ID; BlogPost post = dc.BlogPosts.Single(p => p.BlogPostID == id); 
这将解决问题,
 var blogPosts = (from p in dc.BlogPosts where p.BlogPostID == ID select p); if(blogPosts.Any()) { var post = post.Single(); } 
请用
 .FirstOrDefault() 
因为如果在结果的行中没有任何信息,该指令就会以info的forms进入行默认值。
错误原因:
- 
from p in dc.BlogPosts where p.BlogPostID == ID select p查询from p in dc.BlogPosts where p.BlogPostID == ID select p返回一个序列。
- 
Single()尝试从步骤1中返回的序列中检索元素。
- 
根据例外 – 步骤1中返回的序列不包含任何元素。 
- 
Single()尝试从步骤1中返回的序列中检索一个元素,其中不包含任何元素。 
- 
由于 Single()无法从步骤1中返回的序列中获取单个元素,因此会引发错误。
固定:
 确保查询(from p in dc.BlogPosts where p.BlogPostID == ID select p) 
返回至less包含一个元素的序列。