Beispiel #1
0
 /// <summary>
 /// Returns the consumption of a given kind of Mengeneinheit within the specified reference time range.
 /// </summary>
 /// <param name="em">Energiemenge</param>
 /// <param name="reference">reference time frame</param>
 /// <param name="wev">Wertermittlungsverfahren</param>
 /// <param name="obiskennzahl">OBIS number</param>
 /// <param name="me">an extensive unit (e.g. "kWh")</param>
 /// <returns>the consumption within the give time slice <paramref name="reference"/> in the unit passed as <paramref name="me"/></returns>
 public static decimal GetConsumption(this BO4E.BO.Energiemenge em, ITimeRange reference,
                                      Wertermittlungsverfahren wev, string obiskennzahl, Mengeneinheit me)
 {
     if (!me.IsExtensive())
     {
         throw new ArgumentException($"The Mengeneinheit {me} isn't extensive. Calculating a consumption doesn't make sense.");
     }
     return(em.Energieverbrauch
            .Where(v => v.Wertermittlungsverfahren == wev && v.Obiskennzahl == obiskennzahl && v.Einheit == me)
            //.AsParallel<Verbrauch>()
            .Sum(v => GetOverlapFactor(new TimeRange(v.Startdatum, v.Enddatum), reference, false) * v.Wert));
 }