删除LINQ查询中的多个记录的最佳方法?

24 linq linq-to-sql

使用LINQ一次删除多个记录的最佳方法是什么?

Dav*_*vid 29

使用Linq2Sql删除记录

CustomerDataContext ctx = new CustomerDataContext("connection string");
var customers = ctx.Customers.Where(c => c.Name == "david");

ctx.Customers.DeleteAllOnSubmit(customers);
ctx.SubmitChanges();

  • 这是最简单的方法之一,但我不认为是最有效的方法.实际上没有执行任何优化.生成的SQL枚举与您的查询匹配的所有对象,然后手动迭代它们以删除它们.请参阅此文章 - http://stackoverflow.com/questions/869209/bulk-deleting-via-linq (3认同)

Asa*_*lik 7

使用实体框架 6

using (EntitiesContext db = new EntitiesContext(connString))
        {
            // Retrieve all records from database for deletion
            IEnumerable<entity> entityList = db.entity.where(x => x.id == id).toList();

            // Use Remove Range function to delete all records at once
            db.entity.RemoveRange(entityList);

            // Save changes
            db.SaveChanges();
        }
Run Code Online (Sandbox Code Playgroud)


小智 5

这是我解决问题的方法:

try
{
    List<MaterialPartSerialNumber> list = db.MaterialPartSerialNumbers.Where(s => s.PartId == PartId && s.InventoryLocationId == NewInventoryLocationId && s.LocationId == LocationId).ToList();
    db.MaterialPartSerialNumbers.RemoveRange(list);
    db.SaveChanges();
}
catch(Exception ex)
{
    string error = ex.Message;
}
Run Code Online (Sandbox Code Playgroud)

首先,您可以找到要删除的项目的列表。

然后,您可以使用该函数RemoveRange(**list_of_item_to_delete**)来删除数据库中存在的列表中的每个实例。

根据 MSDN,该方法从 List 中删除一系列元素。

有关详细信息,请在此处查看https://msdn.microsoft.com/en-us/library/y33yd2b5(v=vs.110).aspx


Khu*_*ziz 4

好的旧存储过程......

您可以将 SPROC 拖到 DBML 文件中,它将在您的数据库上下文类中生成丰富的方法。