c# - 如何从 Entity Framework 集合中删除项目的子集

标签 c# entity-framework

我有一个 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);
}

基本上,我试图从 order.Requirements 集合中删除不在 orderContract.Requirements 集合中的任何内容(匹配 ID)。

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

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

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

最佳答案

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

// 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);
}

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

关于c# - 如何从 Entity Framework 集合中删除项目的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7813207/

相关文章:

c# - 将自定义集合转换为 DataRow

c# - 通过 AssociatedControlID 从文本框访问标签

c# - 这个使用 EF 的数据库查询是否正确?

c# - 我自己的 OrderBy 函数

c# - 定时任务限制(或者任务持久化是如何实现的)?

c# - Entity Framework ,代码优先: Avoid unwanted connections to the azure master database

c# - 超时使用 TaskCompletionSource 实现的异步方法

c# - Linq-to-SQL 中的 SubmitChanges 和 Entity Framework 中的 SaveChanges 之间的技术区别是什么?

c# - 如何在 ASP.Net Identity 中设置连接字符串

c# - 使用继承模型进行实体拆分