InvalidOperationException:Sequence不包含任何元素

时间:2014-12-21 19:04:58

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

我使用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}
}

第一行代码应返回“Not Active”项目列表,它实际上有效。 但它仅适用于具有“非活动”项目的用户,其他用户在foreach行中获得例外说法:

[InvalidOperationException: Sequence contains no elements]

如何解决? 感谢

2 个答案:

答案 0 :(得分:0)

你确定你的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>();
        }
    }
}

答案 1 :(得分:0)

使用该行的第一部分,但不使用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>() ;