private void DataChanged() { if (Container != null && CurrentPeriod != null) { var periods = Container.Periods .Where(period => period.From >= CurrentPeriod.From) .SelectMany(period => period.Regions .Where(region => region.RegionId == SelectedRegion) .Where(region => region.Estimated?.GramsOfCO2PerkWh.HasValue ?? false) .Select(region => (Period: period, GramsOfCO2PerkWh: region.Estimated.GramsOfCO2PerkWh.Value))) .ToArray(); var maxGramsOfCO2PerkWh = periods.Max(tuple => tuple.GramsOfCO2PerkWh); var periodIntensities = periods .Select( tuple => new PeriodIntensity { From = tuple.Period.From.ToLocalTime(), To = tuple.Period.To.ToLocalTime(), GramsOfCO2PerkWh = tuple.GramsOfCO2PerkWh, PercentOfMaxGramsOfCO2PerkWh = tuple.GramsOfCO2PerkWh / maxGramsOfCO2PerkWh, RemainingPercentOfMaxGramsOfCO2PerkWh = 1 - (tuple.GramsOfCO2PerkWh / maxGramsOfCO2PerkWh) }) .OrderBy(periodIntensity => periodIntensity.GramsOfCO2PerkWh) .ToArray(); GoodPeriods = periodIntensities.Take(3).ToArray(); BadPeriods = periodIntensities.Reverse().Take(3).Reverse().ToArray(); BestPeriod = GoodPeriods.First(); WorstPeriod = BadPeriods.Last(); } }
private static void TestBadPeriods(AConnection oDB, ASafeLog oLog) { oDB.LogVerbosityLevel = LogVerbosityLevel.Verbose; var bp = new BadPeriods(new DateTime(2001, 2, 12)); bp.Add(new DateTime(2002, 3, 13), false); bp.Add(new DateTime(2002, 4, 18), false); bp.Add(new DateTime(2005, 5, 13), true); bp.Add(new DateTime(2006, 5, 13), false); oLog.Debug("{0}", bp); }
} // ToString /// <summary> /// Creates a deep copy of current model. /// </summary> /// <returns>A copy of current model.</returns> public LoanCalculatorModel DeepClone() { var lcm = new LoanCalculatorModel { InterestOnlyRepayments = InterestOnlyRepayments, }; lcm.DiscountPlan.AddRange(DiscountPlan); lcm.Repayments.AddRange(Repayments.Select(v => v.DeepClone())); lcm.Fees.AddRange(Fees.Select(v => v.DeepClone())); lcm.BadPeriods.AddRange(BadPeriods.Select(v => v.DeepClone())); lcm.LoanHistory.Clear(); lcm.LoanHistory.AddRange(LoanHistory.Select(v => v.DeepClone())); return lcm; } // DeepClone