From "Fixing LINQ Error: Sequence contains no elements": When you get the LINQ error "Sequence contains no elements", this is usually because you are using the First() or Single() command rather than FirstOrDefault() and SingleOrDefault() . This can also be caused by the following commands: FirstAsync()
Single() asserts that one and only one element exists in the sequence. First() simply gives you the first one.
From "Fixing LINQ Error: Sequence contains no elements":
When you get the LINQ error "Sequence contains no elements", this is usually because you are using the
First()
orSingle()
command rather thanFirstOrDefault()
andSingleOrDefault()
.
This can also be caused by the following commands:
FirstAsync()
SingleAsync()
Last()
LastAsync()
Max()
Min()
Average()
Aggregate()
Please use
.FirstOrDefault()
because if in the first row of the result there is no info this instruction goes to the default info.
Well, what is ID
here? In particular, is it a local variable? There are some scope / capture issues, which mean that it may be desirable to use a second variable copy, just for the query:
var id = ID;
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == id
select p).Single();
Also; if this is LINQ-to-SQL, then in the current version you get a slightly better behaviour if you use the form:
var id = ID;
BlogPost post = dc.BlogPosts.Single(p => p.BlogPostID == id);
In addition to everything else that has been said, you can call DefaultIfEmpty()
before you call Single()
. This will ensure that your sequence contains something and thereby averts the InvalidOperationException "Sequence contains no elements". For example:
BlogPost post = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p).DefaultIfEmpty().Single();
This will solve the problem,
var blogPosts = (from p in dc.BlogPosts
where p.BlogPostID == ID
select p);
if(blogPosts.Any())
{
var post = post.Single();
}
I had a similar situation on a function that calculates the average.
Example:
ws.Cells[lastRow, startingmonths].Value = lstMediaValues.Average();
Case Solved:
ws.Cells[lastRow, startingmonths].Value = lstMediaValues.Count == 0 ? 0 : lstMediaValues.Average();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With