更新IEnumerable中的item属性,但该属性未保持设置状态吗?

我有两个表:Transactions和TransactionAgents。TransactionAgents有一个名为TransactionID的事务外键。很标准。


我也有这段代码:


BrokerManagerDataContext db = new BrokerManagerDataContext();


var transactions = from t in db.Transactions

                   where t.SellingPrice != 0 

                   select t;


var taAgents = from ta in db.TransactionAgents

               select ta;


foreach (var transaction in transactions)

{

    foreach(var agent in taAgents)

    {

        agent.AgentCommission = ((transaction.CommissionPercent / 100) * (agent.CommissionPercent / 100) * transaction.SellingPrice) - agent.BrokerageSplit;

    } 

}


dataGridView1.DataSource = taAgents;

基本上,一个TransactionAgent具有一个名为AgentCommission的属性/列,对于我数据库中的所有TransactionAgent,该属性/列都为null。


我的目标是执行您在中看到的数学运算foreach(var agent in taAgents)以修补每个代理的值,以使其不为null。


奇怪的是,当我运行此代码并在agent.AgentCommission = (formula)其上出现断点时,表明正在为AgentCommissision计算值,并且正在更新对象,但是在我的数据网格中显示了该值(仅用于测试)之后,它没有显示其计算出的值。


因此,对我而言,似乎该属性并未永久设置在该对象上。此外,如果我通过更新将这个新更新的对象持久化到数据库中,我怀疑计算出的AgentCommission是否会在那里设置。


在没有以相同方式设置表的情况下,是否有人可以查看代码并了解为什么我不保留该属性的值?


哈士奇WWW
浏览 433回答 3
3回答

守候你守候我

具体来说,问题在于每次您访问IEnumerable时,它都会枚举集合。在这种情况下,集合是对数据库的调用。在第一部分中,您将从数据库中获取值并进行更新。在第二部分中,您将再次从数据库中获取值,并将其设置为数据源(或者,将您的枚举器设置为数据源,然后从数据库中获取值)。使用.ToList()或类似方法将结果保存在内存中,并每次访问相同的集合。
打开App,查看更多内容
随时随地看视频慕课网APP