为什么这个错误,“序列不包含任何元素”,怎么回事? [英] Why is this error, 'Sequence contains no elements', happening?

查看:6482
本文介绍了为什么这个错误,“序列不包含任何元素”,怎么回事?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到一个无效操作异常,堆栈楼下。我想这是因为 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆