我正在尝试删除多行。下面的代码可以解决这个问题,但有点担心,因为ForEach似乎表明它可能会删除比Where子句更多的内容。有没有更好的方法来做到这一点,还是编码低于声音?
db.task_Commt.Where(u => u.GlobalId == companyId
&& u.ItemId == itemId).ToList().ForEach(db.task_task_Commt.DeleteObject);
答案 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);
其他好处:
List.Foreach
是generally discouraged since it offer little benefit over a normal foreach
block.