错误:无法多次枚举查询结果

时间:2010-07-20 20:15:31

标签: entity-framework domainservices

使用以下代码在EF 4.0中调用SP:

  public IQueryable<Employee> GetEmployeesByFollowup()
        {
            var results = from p in this.ObjectContext.SearchEmployeeFollowup()
                          select p;
            foreach (Employee p in results)
            {
                p.DepaermentReference.Load();                
            }
            return results.AsQueryable<Employee>();
        }

For循环中导致以下错误:

“查询的结果不能多​​次枚举。”} System.SystemException {System.InvalidOperationException}

它似乎在某个时候运作良好。不要理解为什么。

3 个答案:

答案 0 :(得分:4)

从方法返回IQueryable仅在您想要在执行之前向查询(过滤器,投影,连接...)添加内容时才有用。但是,由于您的方法使用foreach枚举结果,因此在您返回查询时已经执行了查询,因此添加任何内容都为时已晚......

也许您的方法应该返回IEnumerable<Employee>而不是:

    public IEnumerable<Employee> GetEmployeesByFollowup()
    {
        var results = this.ObjectContext.SearchEmployeeFollowup().ToList();
        foreach (Employee p in results)
        {
            p.DepaermentReference.Load();
        }
        return results;
    }

BTW,EF 4.0处理相关实体的延迟加载,因此您通常不必明确调用Load

答案 1 :(得分:3)

如果你没有真正使用IQueryable接口,那么简单的解决方案就是cal .ToList()并使用IEnumerableList返回类型。

答案 2 :(得分:1)

public IEnumerable<Employee> GetEmployeesByFollowup()
{
    var results = this.ObjectContext.SearchEmployeeFollowup().ToList();
    foreach (Employee p in results.ToList())
    {
        p.DepaermentReference.Load();
    }
    return (IEnumerable<Employee>)results;
}

在foreach循环中,尝试转换结果.ToList() 有趣,但在我的情况下工作。