【问题标题】:Foreach delete with linqForeach 使用 linq 删除
【发布时间】:2012-12-24 21:41:02
【问题描述】:

下面的语句应该从 allCars 中删除 someCars,它可以工作,但是我想知道是否有更好的解决方案,专门只使用 linq

foreach (var car in someCars) 
{
    db.allCars.DeleteObject(car); 
}

注意 db 是 db 实体的实例。

任何帮助将不胜感激。

【问题讨论】:

标签: linq entity-framework


【解决方案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() 来解决,假设我是正确的。
    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    • 2018-03-13
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    相关资源
    最近更新 更多