如何根据以前的条件计算对象的当前值?

时间:2016-04-13 13:08:32

标签: c# .net asp.net-mvc

我正在寻找以下优化。

我有一个具有一些属性的对象。为简单起见,我将在此方案中显示唯一重要的2个。

 public class DomainData
 {
   public long Id{ get; set; }
   public long SoldTickets { get; set; }
 }

我调用我的数据库并获取上述对象的列表:

 var databaseData = _iOvervatchManager.GetDomainData(id);// gets date from db

 var model = new List<DomainModel>();

现在我需要计算列表项之间售出的票数。

  

current = current - previous

我使用以下代码进行计算:

    for (int i = 0; i <= databaseData.Count() -1; i++)
    {
        if (i != 0)
        {
            long ticket = databaseData[i].SoldTickets- databaseData[i - 1].SoldTickets;
            model.Add(new DomainModel 
                { 
                         DomainId = databaseData[i].DomainId ,
                         SoldTicketsLastUpdate = ticket
               });
        }
    }

现在在原始对象上设置值。

    for(int i= 0; i< databaseData.Count(); i++)
    {
        if(databaseData[i].Id == model[i].DomainId )
           databaseData[i].SoldTickets = model[i].SoldTicketsLastUpdate;
    }

我认为这是实现这一目标的一种可怕方式,因为我在第一次循环中可以做到这一点,但我无法弄清楚如何做到这一点。

我的第一次尝试是:

for (int i = 0; i <= databaseData.Count() -1; i++)
{
    if (i != 0)
    {
       databaseData[i].SoldTickets 
                        = databaseData[i].SoldTickets - databaseData[i - 1].SoldTickets;
    }
}

但这是错误的,因为我更改了对象值,当我进入下一个增量时,前一个值已经被修改,因此该循环增量的当前值得到了错误的计算。

如何优化此功能?

1 个答案:

答案 0 :(得分:4)

假设在此次运行(!!)后没有添加新数据,请向后执行for循环:

for (int i = databaseData.Count() - 1; i > 0; i--)
{
    databaseData[i].SoldTickets = databaseData[i].SoldTickets - databaseData[i - 1].SoldTickets;
}

由于循环仅针对i > 0运行,因此不需要检查i != 0