C# ASP.Net MVC foreach循环未持久化更改
我有一个我认为很简单的情况——但我已经坚持了一段时间了 我只是简单地查询数据库,并将结果放入一个viewmodel:C# ASP.Net MVC foreach循环未持久化更改,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我有一个我认为很简单的情况——但我已经坚持了一段时间了 我只是简单地查询数据库,并将结果放入一个viewmodel:CallVM——这部分工作正常 然后我想做的是,它循环通过QueueByTeam对象,并更新其中一个属性-但是,“循环”部分不会保存对QueueByTeam对象的更改,因此当我将对象返回到视图时,我的更新被忽略: var QueueByTeam = db.Calls.Where(x => x.assignedteam == id) .Select(cal
CallVM
——这部分工作正常
然后我想做的是,它循环通过QueueByTeam
对象,并更新其中一个属性-但是,“循环”部分不会保存对QueueByTeam
对象的更改,因此当我将对象返回到视图时,我的更新被忽略:
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());
在返回视图之前,是否需要在foreach循环之后执行某些操作来保存更改
谢谢,Mark将代码更改为:
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);
i、 e.在尝试更改数据之前,将ToList()
直接放在选择之后。这将强制数据库查询立即运行并将结果存储在列表中
从每次查询QueuesByTeam
时的外观来看,它正在重新查询数据库,因此丢失了所做的更改
作为旁注,如果更改只是将所有者设置为“----”
,则可以将其直接放入原始select语句中,而不是使用单独的for循环。如果将ToList()
语句放在select语句的末尾,会发生什么情况。这将强制读取数据库并将其存储在本地?您能否将calls.owner=“----”替换为owner=“”`?@bob vale-谢谢,这正是问题所在。你能回答这个问题吗?我会记下来的。谢谢你的帮助。mark只是为了澄清一下,要点是call=>newcallvm
。您的查询将创建新的未附加对象,并执行2次查询。