使用Entity Framework,我尝试从对象上下文中删除一些对象:
foreach (var item in context.Items.Where( i => i.Value > 50 ) )
{
context.Items.DeleteObject(item);
}
使用此代码,我有一个“Collection was Modified”异常。
那么,我该如何进行批量删除?
答案 0 :(得分:28)
您必须首先从要修改的集合中获取要删除的项目。您可以使用简单的LINQ查询(使用ToList()强制执行)来执行此操作:
var toDelete = context.Items.Where(i => i.Value > 50).ToList();
foreach(var item in toDelete)
{
context.Items.DeleteObject(item);
}
或者如果您喜欢紧凑语法(在本例中我不喜欢),您可以使用:
context.Items
.Where(i => i.Value > 50)
.ToList()
.ForEach(item => context.Items.DeleteObject(item));
答案 1 :(得分:6)
在foreach中,当修改Collection时,会出现异常。
解决方案: 复制你的收藏。
context.Items.Where( i => i.Value > 50 ).ToList().ForEach(item => context.Items.Remove(item));