从列表复制到列表的更好方法是什么?

时间:2017-02-07 08:10:01

标签: c# asp.net linq list foreach

一个单位可以有很多与之相关的价格(不同的价格适用于一年中的不同时间)。

enter image description here

单位“A”的价格为3季(3种不同价格)和单位“B”& “C”也有3个赛季和pices。现在我需要复制startDate和endDate表格单元“A”所有3个季节的单位“B”& “C”但保持单位“B”的价格& “C”只改变startDate和endDate。使用什么以及如何使用IList或IEnumerable其他内容?我想太多次了,如果和foreach ......

我试试这个......但是必须更好地解决任何问题吗?

            //select A Unit (Master unit)
        _masterUnit = Core.Model.Unit.GetById(Convert.ToInt32(ddlAllUnits.SelectedValue));

        IList<Core.Model.Unit> allUnits = Core.Model.Unit.GetUnits();

        IList<Price> _masterPrices = Price.GetPricesOfUnit(_masterUnit.UnitId);

        int mp;
        int xp;

        foreach (Core.Model.Unit unit in allUnits)
        {
            if ((unit.UnitId != _masterUnit.UnitId) && (_masterPrices.Count == unit.AllUnitPrices.Count))
            {
                mp = 1;
                xp = 1;

                IList<Price> _unitPrices = Price.GetPricesOfUnit(unit.UnitId);
                foreach (Price _pricex in _masterPrices)
                {
                   xp = 1;
                    foreach (Price price in _unitPrices)
                    { 
                        if (mp == xp)
                        {  
                            Price newPrice = null;
                            newPrice = Price.GetById(price.PriceId);

                            newPrice.UnitId = price.UnitId;
                            newPrice.UnitPrice = price.UnitPrice;
                            newPrice.StartDate = _pricex.StartDate;
                            newPrice.EndDate = _pricex.EndDate;
                            newPrice.ExtraBed = price.ExtraBed;
                            newPrice.Save();
                        }xp++;
                    }
                    mp++;
                }   
            }
        }

enter image description here

2 个答案:

答案 0 :(得分:0)

首先,你有一些令人困惑的代码。

其次,我认为我已经成功地简化了逻辑。

    //gets unit A
    _masterUnit = Core.Model.Unit.GetById(Convert.ToInt32(ddlAllUnits.SelectedValue));

    //gets prices for A
    IList<Price> _masterPrices = Price.GetPricesOfUnit(_masterUnit.UnitId);

    //gets all Units 
    IList<Unit> allUnits = Core.Model.Unit.GetUnits();

    foreach(Unit unit in allUnits){

        //gets units price
        var unitPrices = Price.GetPricesOfUnit(_masterUnit.UnitId);

        for(int i = 0; i < unitPrices.length(); i++){

            //replaces start, end date with that of master unit    
            unitPrices[i].StartDate = _masterPrices[i].StartDate;                         
            unitPrices[i].EndDate= _masterPrices[i].EndDate;

            unitPrices[i].Save();
        }
    }

答案 1 :(得分:0)

那个数据库设计很奇怪。

听起来数据搞砸了?

为什么需要将StartDate和EndDate设置为其他单位的那个?

无论哪种方式......执行此操作的步骤都是......

  1. 获取主设备的价格
  2. 获取您关注更新的单位
  3. 这是您遇到问题的地方。你不知道哪个价格项目要更新到哪个日期。例如,如果B单元的价格为5美元,10美元和20美元,那么您如何知道StartDate和EndDate的价格是多少?
  4. 你设计过这个吗?您需要重新考虑设计。我会添加一个新表,PriceBlock(int PriceBlock,date StartDate,date EndDate),每个Price都将映射到PriceBlock。

相关问题