LINQ删除多行

时间:2015-05-26 19:08:01

标签: c# linq

我正在尝试删除多行。下面的代码可以解决这个问题,但有点担心,因为ForEach似乎表明它可能会删除比Where子句更多的内容。有没有更好的方法来做到这一点,还是编码低于声音?

db.task_Commt.Where(u => u.GlobalId == companyId
    && u.ItemId == itemId).ToList().ForEach(db.task_task_Commt.DeleteObject);

2 个答案:

答案 0 :(得分:1)

使用EF 6的RemoveRange()功能删除实体的IQueryable子集。这会将每个实体标记为已删除,并在保存上下文时将其删除。这将更有效,因为它不需要您首先枚举实体。

using(context db = new context()){
    var items = db.task_Commt.Where(u => u.GlobalId == companyId && u.ItemId == itemId);
    db.task_Commt.RemoveRange(items);
    db.SaveChanges();
}

答案 1 :(得分:0)

嗯,从功能上来说这是相同的,但是(可以说)更容易理解发生了什么:

 var itemsToDelete = db.task_Commt.Where(u => u.GlobalId == companyId 
                                      && u.ItemId == itemId)
 foreach(var d in itemsToDelete)
     db.task_task_Commt.DeleteObject(d);

其他好处:

相关问题