使用以下代码在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}
它似乎在某个时候运作良好。不要理解为什么。
答案 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()
并使用IEnumerable
或List
返回类型。
答案 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() 有趣,但在我的情况下工作。