foreach循环中的DeleteObject()

.net c# database entity-framework

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

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

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

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

一般承认的答案

您必须首先从要修改的集合中获取要删除的项目。您可以使用简单的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));

热门答案

在foreach中,当修改Collection时,您将获得异常。

解决方案:复制您的收藏。

context.Items.Where( i => i.Value > 50 ).ToList().ForEach(item => context.Items.Remove(item));



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因