使用foreach()从集合中删除多个实体
本文关键字:删除 实体 集合 foreach 使用 | 更新日期: 2023-09-27 18:18:09
当尝试运行此代码时,我一直得到"collection was modified"错误
var mat = db.Materials
.Where(m => m.ID == material)
.First();
var oldCourses = mat.Courses;
foreach (var oldCourse in mat.Courses)
{
oldCourses.Remove(oldCourse);
}
mat.Courses = oldCourses;
我不知道该怎么做。我相信这是一个普遍的问题,但我似乎找不到任何解决办法。
任何帮助,甚至链接到一个已回答的问题将不胜感激。
您可以通过使用.ToList()
简单地枚举此集合以用作迭代器。
foreach (var oldCourse in mat.Courses.ToList())
{
oldCourses.Remove(oldCourse);
}
复制要删除的项目列表:
foreach (var oldCourse in mat.Courses.ToList())
{
oldCourses.Remove(oldCourse);
}
虽然在这种情况下,我不确定你为什么不直接说mat.Courses.Clear();
。
您是否试图做其他事情而不是从mat.Courses
中删除所有课程?你的代码有点复杂,让我怀疑你可能对变量的引用是如何工作的感到困惑。
当您执行var oldCourses = mat.Courses
时,oldCourses
和mat.Courses
指向相同的引用。因此,当您遍历mat.Courses
并从oldCourses
中删除时,您正在修改foreach
循环使用的迭代器。这就是你得到错误的原因。
在您的代码中,您正在删除集合的所有项,您可以使用mat.Courses.Clear()
代替。
如果你只想删除一些项目,你必须使用另一个列表与你想要删除的课程,迭代它并执行mat.Courses.Remove(oldCourse)
。