【问题标题】:LINQ Delete multiple rowsLINQ 删除多行
【发布时间】:2015-05-26 19:08:01
【问题描述】:

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

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

【问题讨论】:

  • 为什么你认为它删除的比Where 返回的多?似乎不太可能。

标签: c# linq


【解决方案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();
}

【讨论】:

    【解决方案2】:

    嗯,在功能上这将是相同的,但它(可以说)更容易理解正在发生的事情:

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

    其他好处:

    【讨论】:

      猜你喜欢
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多