有类似于 DbSet<T>.RemoveWhere(Predicate<T>) 的东西吗?

7

可能是重复问题:
在 LINQ to Entities 中批量删除

我需要根据条件删除某些实体。例如,删除所有数量小于1的订单项:

var orderId = 10; // any order Id
context.OrderItems.RemoveWhere(item => item.OrderId == orderId && item.Quantity < 1.0);

我知道,我可以像这样逐个选择这些项目,然后将它们删除:
var itemsToRemove = context.OrderItems.Where(item => item.OrderId == orderId && item.Quantity < 1.0).ToArray();

foreach (var item in itemsToRemove)
  context.OrderItems.Remove(item);

但这种情况很不可能发生,因为会增加额外的工作量。 我有遗漏什么吗?
1个回答

3

这个解决方案有一些限制,但总比没有好。谢谢,我会尝试的。 - Dennis
@Dennis,它是开源的,所以您可以随时调整它以满足您的要求。 - James
@james,这些限制更多是理论和实践性质。对于ORM来说,没有通用的方法来正确地支持批量更新和删除。这仍然是一个在学术计算机科学中倾向于实际软件工程的开放式研究问题——可以看一下威拉德·库克的“批处理”论文中最新的一些内容。 - John Zabroski
@JohnZabroski 我从未说过有这样的情况,我的回答是针对EF的。最终,ORM只是一个位于应用程序和数据库之间的层,以简化/加速开发,它绝不是万能的解决方案。在许多情况下,为了满足性能/效率需求,完全绕过ORM是必要的。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接