为什么这个错误,“序列不包含任何元素”,怎么回事? [英] Why is this error, 'Sequence contains no elements', happening?
问题描述
我收到一个无效操作异常,堆栈楼下。我想这是因为 db.Responses.Where(Y => y.ResponseId.Equals(item.ResponseId))第一();
没有返回任何结果。我查了响应数据和userResponseDetails有ResponseId,我也只是用硬codeD值。我也知道,调用本该语句添加响应排,这个功能应该被调用。 (这是前工作一个月左右,我不记得任何改变,将打破这个)
[出现InvalidOperationException:序列不包含任何元素]
System.Linq.Enumerable.First(IEnumerable`1源)+269
System.Data.Objects.ELinq.ObjectQueryProvider&放大器; LT; GetElementFunction和放大器; GT; b__0(IEnumerable`1序列)+41
System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1查询,防爆pression queryRoot)+59
System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(前pression前pression)+133
System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(前pression前pression)+87
System.Linq.Queryable.First(IQueryable`1源)+251
InSight.Controllers.ForecasterController.userResponseDetails(List`1 userResponseDetails)1039
下面是违规code。
[HttpPost]
公共JsonResult userResponseDetails(列表< ResponseDetailsPartial> userResponseDetails)
{ 的foreach(在userResponseDetails ResponseDetailsPartial项)
{
ResponseDetails临时=新ResponseDetails();
temp.ResponseId = item.ResponseId;
temp.ResponseDetailVal = item.ResponseDetailVal;
temp.QuestioChoicesId = item.QuestioChoicesId;
temp.Response = db.Responses
。凡(Y => y.ResponseId.Equals(item.ResponseId))第一()。
temp.QuestionChoice = db.QuestionChoices
。凡(X => x.QuestionChoicesId.Equals(item.QuestioChoicesId))第一()。
db.ResponseDetails.Add(临时);
}
db.SaveChanges(); 返回JSON(新{ResponseDetailsId = userResponseDetails},JsonRequestBehavior.AllowGet);
}
这是调用这一特定的行动AJAX的:
$。阿贾克斯({
键入:POST,
网址:'/预报/ userResponseDetails /',
数据:JSON.stringify(rdetail)
数据类型:JSON,
的contentType:应用/ JSON,
})
和这是rdetail已经strigified后:
[{ResponseId:118,ResponseDetailVal0.36,QuestioChoicesId:空}]
再次检查。如果必须使用调试器。我的猜测是,在一些userResponseDetails项目该查询发现没有元素:
。凡(Y => y.ResponseId.Equals(item.ResponseId))
所以你不能叫
。首先()
就可以了。也许尝试
.FirstOrDefault()
如果它解决了问题(就像一个测试)。
I am getting an Invalid Operation Exception, the stack is down below. I think it is because db.Responses.Where(y => y.ResponseId.Equals(item.ResponseId)).First();
is not returning any results. I checked the response data and the userResponseDetails has a ResponseId, I also just used a hard coded value. I also know that the statement that calls this one is adding the Responses row that this function should be calling. (This was working about a month ago and I don't remember changing anything that would break this)
[InvalidOperationException: Sequence contains no elements]
System.Linq.Enumerable.First(IEnumerable`1 source) +269
System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__0(IEnumerable`1 sequence) +41
System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +59
System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +133
System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(Expression expression) +87
System.Linq.Queryable.First(IQueryable`1 source) +251
InSight.Controllers.ForecasterController.userResponseDetails(List`1 userResponseDetails) +1039
Here is the offending code.
[HttpPost]
public JsonResult userResponseDetails(List<ResponseDetailsPartial> userResponseDetails)
{
foreach (ResponseDetailsPartial item in userResponseDetails)
{
ResponseDetails temp = new ResponseDetails();
temp.ResponseId = item.ResponseId;
temp.ResponseDetailVal = item.ResponseDetailVal;
temp.QuestioChoicesId = item.QuestioChoicesId;
temp.Response = db.Responses
.Where(y => y.ResponseId.Equals(item.ResponseId)).First();
temp.QuestionChoice = db.QuestionChoices
.Where(x => x.QuestionChoicesId.Equals(item.QuestioChoicesId)).First();
db.ResponseDetails.Add(temp);
}
db.SaveChanges();
return Json(new { ResponseDetailsId = userResponseDetails }, JsonRequestBehavior.AllowGet);
}
This is the AJAX that calls this specific action:
$.ajax({
type: "POST",
url: '/Forecaster/userResponseDetails/',
data: JSON.stringify(rdetail),
dataType: 'json',
contentType: 'application/json',
})
and this is rdetail after it has been strigified:
[{"ResponseId":118,"ResponseDetailVal":0.36,"QuestioChoicesId":null}]
Check again. Use debugger if must. My guess is that for some item in userResponseDetails this query finds no elements:
.Where(y => y.ResponseId.Equals(item.ResponseId))
so you can't call
.First()
on it. Maybe try
.FirstOrDefault()
if it solves the issue (just as a test).
这篇关于为什么这个错误,“序列不包含任何元素”,怎么回事?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!