1

在以下代码中调用 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}

似乎它在一段时间内工作正常。不明白为什么。

4

3 回答 3

4

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

也许您的方法应该返回 a IEnumerable<Employee>

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

顺便说一句,EF 4.0 处理相关实体的延迟加载,因此您通常不必Load显式调用

于 2010-07-20T21:54:29.047 回答
3

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

于 2011-09-10T05:06:57.303 回答
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 循环中,尝试转换 results.ToList() 有趣,但在我的情况下工作。

于 2011-12-14T06:25:13.900 回答