foreach循环中的DeleteObject()

时间:2010-07-08 14:21:39

标签: c# .net database entity-framework

使用Entity Framework,我尝试从对象上下文中删除一些对象:

foreach (var item in context.Items.Where( i => i.Value > 50 ) )
{
   context.Items.DeleteObject(item);
}

使用此代码,我有一个“Collection was Modified”异常。

那么,我该如何进行批量删除?

2 个答案:

答案 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));