使用实体框架从 ID 列表中删除多个项目

Posted

技术标签:

【中文标题】使用实体框架从 ID 列表中删除多个项目【英文标题】:Delete multiple Items from a List of Id's using Entity Framework 【发布时间】:2016-05-25 04:24:36 【问题描述】:

我需要从 ID 的列表中删除多个 ID。

public IHttpActionResult Delete(List<string> IDs)

    DealBazarEntities.Restaurants.RemoveRange(IDs);
    DealBazarEntities.SaveChanges();

但是RemoveRange 不允许有多个 id,它只需要List&lt;entities&gt;

是的,我知道,如果我将实体列表发送到服务器而不是发送 ID 列表,那么我可以轻松完成此操作。但我不喜欢那样。

再一次,我不想使用foreach 循环遍历每个 ID。

【问题讨论】:

DealBazarEntities.Restaurants.RemoveRange(DealBazarEntities.Restaurants.Where(r =&gt; IDs.Contains(r.ID))); 哇...它的工作就像一个魅力....谢谢。你又节省了我很多时间。 :) 【参考方案1】:

根据Stephen Muecke的答案在问题的评论部分给出的答案,解决方案是:

DealBazarEntities.Restaurants.RemoveRange
(DealBazarEntities.Restaurants.Where(r => IDs.Contains(r.ID)));

【讨论】:

好答案,但请注意,当我对此进行分析时,它执行了一个初始 SELECT,然后为每个匹配的 ID 单独的 DELETE 语句,而不是一个使用 IN 的 DELETE。所以它的效率并不高。 @JohnnyHK 我认为您可以在这种情况下从 EF 执行原始 sql 命令。

以上是关于使用实体框架从 ID 列表中删除多个项目的主要内容,如果未能解决你的问题,请参考以下文章

从实体框架中删除一条记录?

从 id 列表更新实体框架中的多行

如何通过实体框架从 C# 中的同步代码并行运行查询

是否可以在实体框架中将表FK链接到另外两个PK?

如何使用 Hibernate 从 Observable 列表中删除多个项目

如何根据多个条件并使用 linq 从通用列表中删除项目