如何从实体框架集合中删除项目的子集

Vac*_*ano 5 c# entity-framework

我有一个实体框架EntityCollection.

我需要从数据库中删除与给定where子句匹配的所有项.这是我现有的代码:

// Perform the deletes
foreach (var deleteReq in order.Requirements.Where(x=>!orderContract.Requirements.Any(y=>y.RequirementId==x.RequirementId)))
{
    order.Requirements.Remove(deleteReq);
}
Run Code Online (Sandbox Code Playgroud)

基本上我试图从order.Requirements集合中删除任何不在orderContract.Requirements集合中的东西(在Id上匹配).

正如您可能猜到的,此代码抛出异常,因为我正在修改我正在迭代的集合.

通常我会使用,RemoveAll()EntityCollection不支持该方法.

那么......我怎样才能删除我需要的所有记录?

Vac*_*ano 12

我创建了一个单独的列表,它似乎工作:

// Perform the deletes
var reqsToDelete = order.Requirements.Where(x=>!orderContract.Requirements.Any(y=>y.RequirementId==x.RequirementId)).ToList();
foreach (var deleteReq in reqsToDelete)
{
    order.Requirements.Remove(deleteReq);
}
Run Code Online (Sandbox Code Playgroud)

这样,当我从order.Requirements列表中删除该项时,它不会影响我正在迭代的列表.


Bir*_*rey 6

将要删除的所有Requirement实体收集到列表中.

然后从Requirements实体集合中删除其中的每一个,而不是从order.Requirements中删除.