static object SumIf(List <Expression> p)
        {
            // get parameters
            IEnumerable range    = p[0] as IEnumerable;
            IEnumerable sumRange = p.Count < 3 ? range : p[2] as IEnumerable;
            var         criteria = p[1].Evaluate();

            // build list of values in range and sumRange
            var rangeValues = new List <object>();

            foreach (var value in range)
            {
                rangeValues.Add(value);
            }
            var sumRangeValues = new List <object>();

            foreach (var value in sumRange)
            {
                sumRangeValues.Add(value);
            }

            // compute total
            var ce    = new CalcEngine();
            var tally = new Tally();

            for (int i = 0; i < Math.Min(rangeValues.Count, sumRangeValues.Count); i++)
            {
                if (ValueSatisfiesCriteria(rangeValues[i], criteria, ce))
                {
                    tally.AddValue(sumRangeValues[i]);
                }
            }

            // done
            return(tally.Sum());
        }
Beispiel #2
0
        static object SumIf(List<Expression> p)
        {
            // get parameters
            IEnumerable range = p[0] as IEnumerable;
            IEnumerable sumRange = p.Count < 3 ? range : p[2] as IEnumerable;
            var criteria = p[1].Evaluate();

            // build list of values in range and sumRange
            var rangeValues = new List<object>();
            foreach (var value in range)
            {
                rangeValues.Add(value);
            }
            var sumRangeValues = new List<object>();
            foreach (var value in sumRange)
            {
                sumRangeValues.Add(value);
            }

            // compute total
            var ce = new CalcEngine();
            var tally = new Tally();
            for (int i = 0; i < Math.Min(rangeValues.Count, sumRangeValues.Count); i++)
            {
                if (ValueSatisfiesCriteria(rangeValues[i], criteria, ce))
                {
                    tally.AddValue(sumRangeValues[i]);
                }
            }

            // done
            return tally.Sum();
        }
Beispiel #3
0
 // utility for tallying statistics
 static Tally GetTally(List<Expression> p, bool numbersOnly)
 {
     var tally = new Tally(numbersOnly);
     foreach (Expression e in p)
     {
         tally.Add(e);
     }
     return tally;
 }
Beispiel #4
0
 static object Sum(List<Expression> p)
 {
     var tally = new Tally();
     foreach (Expression e in p)
     {
         tally.Add(e);
     }
     return tally.Sum();
 }