循环中条件记录删除

本文关键字:删除 记录 条件 循环 | 更新日期: 2023-09-27 18:08:37

有人能解释一下如何有条件地从EF结果集中删除对象吗?

我的代码

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q;
if (newClubKitOrders.Any())
{
    foreach (NewClubKitOrder order in newClubKitOrders)
    {
        if (checkedStatus == true)
        {
            order.OrderDate = DateTime.Now;
        }
        else
        {
            //delete the row (order.delete())
        }
    }
   newClubKitOrders.SaveChanges();
}

谢谢

循环中条件记录删除

不能删除" foreach "循环中的" order "。所以试试for循环

使用DeleteObject

:

        else
        {
           newClubKitOrders.DeleteObject(order);
        }

这里有一个很好的SO关于其他一些选项和它是如何工作的。

编辑:是的,使用for循环,我没有注意到你在迭代什么。谢谢Rashmin Javiya!

尝试以下代码,我已经在另一个列表中复制列表以确保安全。临时列表只是遍历,但实际事务发生在原始列表

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q;
if (newClubKitOrders.Any())
{
    var TempnewClubKitOrders = newClubKitOrders.ToList();
    for(int i=0; i< TempnewClubKitOrders.Length; i++)
    {
        if (checkedStatus == true)
        {
            newClubKitOrders[i].OrderDate = DateTime.Now;
        }
        else
        {
            db.NewClubKitOrde.DeleteObject(newClubKitOrders[i]);
        }
    }
   db.SaveChanges();
}

应该可以:

var newClubKitOrders = from q in db.NewClubKitOrders where q.NewClubId == ncbId select q;
if (newClubKitOrders.Any())
{
    foreach (NewClubKitOrder order in newClubKitOrders)
    {
        if (checkedStatus == true)
        {
            order.OrderDate = DateTime.Now;
        }
        else
        {
            db.NewClubKitOrders.Remove(order);
        }
    }
    db.SaveChanges();
}