我正在尝试使用MVC删除多个记录。我尝试了很多方法。像
_db.Categories.Where(p => p.CategoryID == catid)
.ToList().ForEach(p => _db.Categories.Remove(p));
_db.SaveChanges();
OR
foreach (Category item in _db.Categories.Where(x => x.CategoryID == catid))
_db.Categories.Remove(item);
_db.SaveChanges();
在这两种情况下,只删除了最后一条记录。我认为foreach
声明不起作用。
我不想要使用效果良好的声明(如下所示):
if (id != null)
{
for (int i = 0; i <= id.Length - 1; i++)
{
category = _db.Categories.Find(id[i]);
_db.Categories.Remove(category);
}
_db.SaveChanges();
}
任何建议都会被感激地接受。
帕塔
答案 0 :(得分:1)
更清洁的解决方案是使用RemoveRange()功能删除一组项目。只需从DbSet中使用linq选择项目,然后调用RemoveRange(yourItems)。这样,您只需修改一次dbset,然后保存上下文。
var itemsToRemove = _db.Categories.Where(p => p.CategoryID == catid);
_db.Categories.RemoveRange(itemsToRemove));
_db.SaveChanges();
答案 1 :(得分:0)
foreach声明无效
它在工作。但根据你的条件,你只会删除一种类别
....Where(p => p.CategoryID == catid) // I assume that catid is a scalar value like integer
如果id
是您要删除的类别ID数组,则可以使用Contains
:
foreach (Category item in _db.Categories.Where(x => id.Contains(x.CategoryID) ).ToList())
_db.Categories.Remove(item);
_db.SaveChanges();