为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
哈士奇WWW 2019-12-04 10:21:20
我有两个表: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是否会在那里设置。在没有以相同方式设置表的情况下,是否有人可以查看代码并了解为什么我不保留该属性的值?
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

具体来说,问题在于每次您访问IEnumerable时,它都会枚举集合。在这种情况下,集合是对数据库的调用。在第一部分中,您将从数据库中获取值并进行更新。在第二部分中,您将再次从数据库中获取值,并将其设置为数据源(或者,将您的枚举器设置为数据源,然后从数据库中获取值)。

使用.ToList()或类似方法将结果保存在内存中,并每次访问相同的集合。


查看完整回答
反对 回复 2019-12-04
  • 3 回答
  • 0 关注
  • 418 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信