c# - 更新 IEnumerable 中的项目属性但该属性未保持设置?

标签 c# linq

我有两个表: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;

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

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

奇怪的是,当我运行此代码并在 agent.AgentCommission = (formula) 上设置断点时,它显示正在计算 AgentCommission 的值并且正在更新对象,但是在它显示在我的datagrid(仅用于测试),它不显示它计算的值。

所以,对我来说,Property 似乎并没有永久设置在对象上。更重要的是,如果我通过更新将这个新更新的对象持久保存回数据库,我怀疑计算出的 AgentCommission 是否会设置在那里。

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

最佳答案

IEnumerable<T> s 不保证更新的值将在枚举中持续存在。例如,List将在每次迭代中返回相同的对象集,因此如果您更新属性,它将在迭代中保存。但是,IEnumerable 的许多其他实现s 每次都返回一组新的对象,因此所做的任何更改都不会保留。

如果需要存储和更新结果,拉取 IEnumerable<T>下降到 List<T>使用 .ToList()或将其转换到新的 IEnumerable<T> 中使用 .Select()应用了更改。

要专门将其应用到您的代码中,它看起来像这样:

var transactions = (from t in db.Transactions
                    where t.SellingPrice != 0 
                    select t).ToList();

var taAgents = (from ta in db.TransactionAgents
                select ta).ToList();

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;

关于c# - 更新 IEnumerable 中的项目属性但该属性未保持设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9104181/

相关文章:

c# - Entity Framework - DbMigrator 不执行迁移类

c# - C# 中的事件驱动标准输入

c# - PInvoke 编码返回字符串数组 C#

c# - 为泛型类实现 IComparable<T> 接口(interface)以比较类型 T

asp.net-mvc - 如何根据用户在 ASP.NET MVC 中的选择对列表进行排序?

c# - 使用 linq 处理空字符串

c# - MDI Form 有焦点吗?

c# - 制作用户控制脉冲

c# - 运算符 '>' 不能应用于查询中类型为 'string' 和 'string' 的操作数

c# - XML 元素属性值是否始终是字符串数据类型?