我有两个表:Transactions和TransactionAgents.TransactionAgents有一个名为TransactionID的Transactions的外键.很标准.
我也有这个代码:
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;
Run Code Online (Sandbox Code Playgroud)
基本上,TransactionAgent有一个名为AgentCommission的属性/列,对于我的数据库中的所有TransactionAgent,它都是null.
我的目标是执行您在foreach(var agent in taAgents)修补每个代理的值时所看到的数学运算,使其不为空.
奇怪的是,当我运行此代码和断点时,agent.AgentCommission = (formula)它显示正在为AgentCommissision计算值并且对象正在更新,但在我的数据网格中显示(仅用于测试)之后,它不显示它计算的值.
所以,对我而言,似乎该属性并未永久设置在该对象上.更重要的是,如果我通过更新将这个新更新的对象保留回数据库,我怀疑计算的AgentCommission将在那里设置.
如果没有以相同的方式设置我的表,是否有人可以查看代码并查看为什么我不保留该属性的值?
eou*_*3hf 91
IEnumerable<T>s不保证更新的值将在枚举中保持不变.例如,a List将在每次迭代时返回相同的对象集,因此如果更新属性,它将在迭代中保存.但是,IEnumerables的许多其他实现每次都返回一组新对象,因此所做的任何更改都不会持久.
如果您需要存储和更新结果,请将其IEnumerable<T>下拉为List<T>使用.ToList()或将其投影到新的IEnumerable<T>使用中.Select()并应用更改.