ASP.Net MVC foreach循环不持久更改

时间:2013-05-30 07:18:20

标签: c# asp.net asp.net-mvc asp.net-mvc-3

我认为这是一个简单的情况 - 但我已经坚持了一段时间了。

我只是查询数据库,并将结果放入viewmodel:CallVM - 该部分工作正常。

我想要做的是,它遍历QueueByTeam对象,并更新其中一个属性 - 但是,“循环”部分不会将更改保存到QueueByTeam对象,所以当我将对象返回到View时,我的更新被忽略了:

  var QueueByTeam = db.Calls.Where(x => x.assignedteam == id)
         .Select(call => new CallVM
          {
              customer = call.customer,
              nexttargetdate = call.nexttargetdate
              owner = "";
          });


        foreach (var calls in QueueByTeam)
        {
            calls.owner = "--------";
        }
        // at this point, QueueByTeam has ignored changing the `owner` field to "-------"           
        return View(QueueByTeam.ToList());

在返回View之前,我是否需要在foreach循环之后执行某些操作来保存更改?

谢谢,Mark

1 个答案:

答案 0 :(得分:2)

将代码更改为:

 var QueueByTeam = db.Calls.Where(x => x.assignedteam == id)
     .Select(call => new CallVM
      {
          customer = call.customer,
          nexttargetdate = call.nexttargetdate
          owner = "";
      })
      .ToList();


    foreach (var calls in QueueByTeam)
    {
        calls.owner = "--------";
    }
    // at this point, QueueByTeam has ignored changing the `owner` field to "-------"           
    return View(QueueByTeam);

即。在尝试更改数据之前,将ToList()放在Select之后。这会强制数据库查询立即运行并将结果存储在列表中。

每次你查询你的QueuesByTeam它都会重新查询数据库,从而丢失你的更改。

作为旁注,如果更改只是将所有者设置为"-----",则可以将其直接放入原始的select语句中,而不是单独进行循环。