Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用foreach语句删除多条记录_C#_Entity Framework - Fatal编程技术网

C# 使用foreach语句删除多条记录

C# 使用foreach语句删除多条记录,c#,entity-framework,C#,Entity Framework,我正在尝试使用MVC删除多个记录。我试过很多方法。像 _db.Categories.Where(p => p.CategoryID == catid) .ToList().ForEach(p => _db.Categories.Remove(p)); _db.SaveChanges(); 或 在这两种情况下,只有最后一条记录被删除。我认为foreach语句不起作用 我不想将其用于工作正常的语句(如下所示): if (id != null) { f

我正在尝试使用MVC删除多个记录。我试过很多方法。像

_db.Categories.Where(p => p.CategoryID == catid)
              .ToList().ForEach(p => _db.Categories.Remove(p));
_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();
}
if(id!=null)
{

对于(int i=0;i一个更简洁的解决方案是使用函数删除一组项目。只需从数据库集中选择具有linq的项目,然后调用RemoveRange(yourItems)。这样,您只需修改数据库集一次,然后保存上下文

var itemsToRemove = _db.Categories.Where(p => p.CategoryID == catid);
_db.Categories.RemoveRange(itemsToRemove));
_db.SaveChanges();
foreach语句不工作

它正在工作。但是根据您的where条件,您将只删除一种类型的类别

    ....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();

这与jQuery无关,请正确选择您的标记。使用适当的标记标记您的问题将增加有人可以帮助您看到此问题的机会。非常正常,如前两个代码
,其中(p=>p.CategoryID==catid)
(可能是int)仅删除一种类型的类别,并在最后一个代码中删除多个类别(id[i]每个for/loop更改一个值)。
foreach (Category item in _db.Categories.Where(x => id.Contains(x.CategoryID) ).ToList())
    _db.Categories.Remove(item);

_db.SaveChanges();