Foreach 使用 linq 删除
Posted
技术标签:
【中文标题】Foreach 使用 linq 删除【英文标题】:Foreach delete with linq 【发布时间】:2012-12-24 21:41:02 【问题描述】:下面的语句应该从 allCars 中删除 someCars,它可以工作,但是我想知道是否有更好的解决方案,专门只使用 linq
foreach (var car in someCars)
db.allCars.DeleteObject(car);
注意 db 是 db 实体的实例。
任何帮助将不胜感激。
【问题讨论】:
How do I delete multiple rows in Entity Framework (without foreach) 的可能重复项 【参考方案1】:您可以使用EntityFramework.Extended 库根据某些条件删除实体(库可从 Nuget 获得):
db.allCars.Delete(car => /*condition*/);
【讨论】:
好样的,效果很好,非常感谢您的快速响应【参考方案2】:将 Linq 用作 ForEach:
db.allCars.Where(/* condition */).ToList().ForEach(car => db.allCars.Remove(car));
在这个答案的同一行:),How do I delete multiple rows in Entity Framework (without foreach)
【讨论】:
【参考方案3】:你可以使用:
db.allCars.RemoveAll(db.allCars.Where(/* condition */));
【讨论】:
您好,感谢您的快速回复。在来这里之前我确实尝试过这个,但是执行需要很长时间(超过一分钟)。 我相信这需要很长时间才能执行的原因是该值永远不会被缓存。作为 IEnumberable,每次迭代都会从数据库中获取它。因此,对于每辆被删除的汽车,它会在删除下一辆车之前收集数据库中的每辆汽车。这可以在Where
子句之后使用.ToList()
来解决,假设我是正确的。以上是关于Foreach 使用 linq 删除的主要内容,如果未能解决你的问题,请参考以下文章