使用foreach语句删除多个记录

时间:2015-11-10 16:21:27

标签: c# entity-framework

我正在尝试使用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();
}

任何建议都会被感激地接受。

帕塔

2 个答案:

答案 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();