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 删除的主要内容,如果未能解决你的问题,请参考以下文章

使用 Linq 替换 foreach 语句

LINQ中ForEach方法的使用

如何使用 LINQ 修改 IEnumerable 以避免 foreach 循环? [复制]

linq / lambda 中的多行 foreach 循环

将 Foreach 转换为 linq 表达式

来自多个 Foreach 的 Linq