/// <summary> /// normalise energiemenge->energieverbrauch consumption values to a given <paramref name="target" /> value /// </summary> /// <param name="em">Energiemenge</param> /// <param name="target">normalising constant (1.0 by default)</param> /// <returns>new Energiemenge object with normalised consumption values</returns> public static BO.Energiemenge Normalise(this BO.Energiemenge em, decimal target = 1.0M) { using (MiniProfiler.Current.Step(nameof(Normalise))) { BO.Energiemenge result; decimal scalingFactor; Tuple <decimal, Mengeneinheit> totalConsumption; using (MiniProfiler.Current.Step("Calculating total consumption and normalisation factor.")) { totalConsumption = em.GetTotalConsumption(); result = em.DeepClone(); if (totalConsumption.Item1 != 0.0M) { scalingFactor = target / totalConsumption.Item1; } else { scalingFactor = 0.0M; } } using (MiniProfiler.Current.Step("Parallelised normalising of all values.")) { Parallel.ForEach(result.Energieverbrauch.Where(v => v.Einheit == totalConsumption.Item2), v => { v.Wert = scalingFactor * v.Wert; }); } return(result); } }
public static List <BO.Energiemenge> SplitInPureGroups(this BO.Energiemenge em) { if (em.Energieverbrauch == null) { return(new List <BO.Energiemenge>() { em }); } else { var result = new List <BO.Energiemenge>(); foreach (var group in em.Energieverbrauch.GroupBy(PurityGrouper)) { BO.Energiemenge pureEm = em.DeepClone(); pureEm.Energieverbrauch = group.ToList(); result.Add(pureEm); } return(result); } }