在LINQ to Entities中批量删除

Ben*_*ack 79 c# linq database linq-to-entities entity-framework

有没有办法在LINQ或LINQ-to-Entities中批量删除与给定查询匹配的一堆对象?我能找到的唯一引用已经过时了,迭代并手动删除我想删除的所有对象似乎很愚蠢.

Ale*_*mes 54

前阵子我写4部分的博客系列(零件1,2,34中的实体框架覆盖做批量更新(有一个命令)).

虽然该系列的重点是更新,但您肯定可以使用所涉及的原则来进行删除.

所以你应该能够写出这样的东西:

var query = from c in ctx.Customers
            where c.SalesPerson.Email == "..."
            select c;

query.Delete();
Run Code Online (Sandbox Code Playgroud)

您需要做的就是实现Delete()扩展方法.有关如何...的提示,请参阅帖子系列

希望这可以帮助

  • 嗯...所以这个问题的答案是重定向到4篇博文,而不是向观众展示具体的答案. (23认同)
  • 如果有人拥有它,那么在这里有一个代码示例会很高兴! (17认同)
  • 提供的链接不再指向任何地方。 (2认同)

Vla*_*den 40

    using (var context = new DatabaseEntities())
    {
        // delete existing records
        context.ExecuteStoreCommand("DELETE FROM YOURTABLE WHERE CustomerID = {0}", customerId);
    }
Run Code Online (Sandbox Code Playgroud)

  • +1 - 很高兴看到如何使用EF执行SQL代码的代码示例 (3认同)
  • 我意识到这可能是唯一的方法,没有创建存储过程,但这感觉就像作弊=).现在我正在使用它,我很想在其他几个地方使用它来解决EF的怪癖lol - 比如复杂的左连接和分组....... (2认同)
  • 轻微的缺点:您现在拥有一个与开发环境断开连接的数据库命令.它不是强类型的,因此在Visual Studio中不会突出显示对此SQL**中的列的数据库更改** (2认同)

Sha*_*ica 30

问题是旧问题(从EF5之前就存在).对于使用EF5的任何人来说,EntityFramework.Extended会立即执行此操作.


Phi*_*ong 7

我在这里看到的答案是Linq to Sql

DeleteAllOnSubmit是System.Data.Linq和ITable的一部分,它是Linq to Sql

使用Entity Framework无法做到这一点.

说完所有这些我还没有解决方案,但会在我做的时候回复


Uri*_*iil 6

对于那些使用 EF6 并希望执行行 SQL 查询进行删除的人:

using (var context = new DatabaseEntities())
{
    // delete existing records
    context.Database.ExecuteSqlCommand("DELETE FROM YOURTABLE WHERE CustomerID = @id", idParameter);
}
Run Code Online (Sandbox Code Playgroud)