【问题标题】:InvalidOperationException: Sequence contains no elementsInvalidOperationException:序列不包含任何元素
【发布时间】:2015-02-19 23:08:00
【问题描述】:

我使用 mvc 和实体框架在 .net 中编写了代码:

@{
   List<DAL.Project> oldProjectList = new BL.ProjectLogic().getProjects(userName).Where(s => s.Status == "Not Active").ToList();
}
@foreach (DAL.Project p in oldProjectList)
{
     {some code}
}

第一行代码应该返回一个“非活动”项目列表,它确实有效。 但它仅适用于拥有“非活动”项目的用户,其他用户在 foreach 行中出现异常:

[InvalidOperationException: Sequence contains no elements]

如何解决? 谢谢

【问题讨论】:

  • 调用堆栈?我很确定你自己在 ProjectLogicgetProjects 中的代码会引发异常。

标签: asp.net-mvc entity-framework invalidoperationexception


【解决方案1】:

您确定在您的 foreach 中引发了异常吗?在这个可重现的小例子中,我在执行时不会遇到同样的错误:

using System;
using System.Collections.Generic;
using System.Linq;

namespace LinqPlayground
{
    class Program
    {
        public class Project
        {
            public string Status { get; set; }
        }

        static void Main(string[] args)
        {
            var projects = GetProjects("test").Where(project => project.Status == "Not Active").ToList();
            foreach (var project in projects)
            {
                Console.WriteLine(project.Status);
            }
        }

        public static IEnumerable<Project> GetProjects(string userName)
        {
            return new List<Project>();
        }
    }
}

【讨论】:

    【解决方案2】:

    使用该行的第一部分,但不使用 ToList()。

    相反,将 Where() 的结果保存在 var 中,然后使用该 VAR 检查。任何():

    var temp = new BL.Proje s ctLogic().getProjects(userName)
        .Where( => s.Status == "Not Active");
    
    List<DAL.Project> oldProjectList = 
        temp.Any() ? 
            temp.ToList() : 
            new List<DAL.Project>() ;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 1970-01-01
      • 2015-09-04
      • 1970-01-01
      • 2016-12-06
      相关资源
      最近更新 更多