c# - 为什么会发生此错误 'Sequence contains no elements' ?

标签 c# asp.net-mvc-3 linq

我收到无效操作异常,堆栈在下方。我认为这是因为 db.Responses.Where(y => y.ResponseId.Equals(item.ResponseId)).First(); 没有返回任何结果。我检查了响应数据并且 userResponseDetails 有一个 ResponseId,我也只是使用了一个硬编码值。我还知道调用此函数的语句正在添加此函数应调用的 Responses 行。 (这是大约一个月前的工作,我不记得改变任何会破坏它的东西)

[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

这是有问题的代码。

    [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);
    }

这是调用此特定操作的 AJAX:

$.ajax({
         type: "POST",
         url: '/Forecaster/userResponseDetails/',
         data: JSON.stringify(rdetail),
         dataType: 'json',
         contentType: 'application/json',
     })

这是 strigified 之后的细节:

[{"ResponseId":118,"ResponseDetailVal":0.36,"QuestioChoicesId":null}] 

最佳答案

再次检查。如果必须,请使用调试器。我的猜测是,对于 userResponseDetails 中的某些项目,此查询找不到任何元素:

.Where(y => y.ResponseId.Equals(item.ResponseId))

所以你不能打电话

.First()

就可以了。也许试试

.FirstOrDefault()

如果它解决了问题。

不要返回 NULL 值!这纯粹是为了让您可以查看和诊断问题所在。妥善处理这些情况。

关于c# - 为什么会发生此错误 'Sequence contains no elements' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21008017/

相关文章:

asp.net-mvc-3 - 使用 for 循环是在 ASP.NET MVC 应用程序中添加多个相似数据库条目的最优雅的方法吗? ( C# )

c# - jQuery Ajax、MVC 和查询字符串

c# - 使用 linq 时摆脱嵌套的 foreach 循环

c# - ConfigureAwait 是否只影响非线程池线程?

C# 扩展 (OmniSharp) 在 VSCode 中给出错误结果

c# - Unity3d检测平面上的点击

c# - 使用 IEnumerable 的详细信息实例化列表的基于 LINQ 的优雅方法

c# - 如何从字节数组制作 Sprite ?

.net - 注册每个请求的依赖项

linq - 在 LINQ 语句之间共享 where 子句