6

可能重复:
Bulk-deleting in LINQ to Entities有什么样DbSet <T> .RemoveWhere(谓语<T>)

我需要通过条件删除一些实体。例如,除去具有数量少的所有订单项比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); 

但是,这是非常不可能,因为额外的工作将会发生。 我错过了什么吗?

回答

3

您可以在支持Batch Update and Delete的GitHub上使用EntityFramework.Extended插件。

+0

此解决方案有一些限制,但它比没有更好。谢谢,我会尝试。 – Dennis 2012-07-25 11:50:08

+0

@丹尼斯它是开源的,所以你可以随时调整它以适应你的需求。 – James 2012-07-25 12:00:33

+0

@詹姆斯的局限性更具理论性/实践性。 ORM没有通用的方式来正确支持批量更新和删除。在学术计算机科学中,它仍然是一个开放的研究问题,倾向于实际的软件工程 - 参见威拉德库克的“批处理”论文。 – 2015-06-15 13:44:14