149

关于为什么这可能会破坏的任何想法?

foreach (var p in pp)
{
    ProjectFiles projectFile = (ProjectFiles)p;
    projectFile.Status = Constants.ProjectFiles_ERROR;
    projectFile.DateLastUpdated = DateTime.Now;
    context.SaveChanges();
}

我读到该问题的解决方法是在 foreach 循环之前一次性检索结果。

但我没有这样做吗?“pp”是我的情况下的结果集合

4

2 回答 2

377

pp变量不是对象的集合,它是一个可以返回对象的枚举器。使用枚举器时,源必须保持打开状态。

使用该ToList方法将枚举数实现为集合。这将从枚举器中读取所有项目并关闭与源的连接,以便您可以将连接用于其他事情。

foreach (var p in pp.ToList())
于 2012-04-10T21:14:02.097 回答
10

.ToList()解决此问题的一种方法是在迭代之前调用您的集合。

当您使用它时,context.SaveChanges()在循环退出后只调用一次以加快代码速度。

于 2015-04-08T12:46:36.293 回答