/// <summary>
        /// Runs a calculation and adds the result to <paramref name="resultsContainer"/>.
        /// </summary>
        /// <param name="control">The calculation to run.</param>
        /// <param name="resultsContainer">A dictionary of results.</param>
        /// <param name="exceptionList">A list that <see cref="ExpressionEvaluatorException"/>s will be added to before returning to the client.</param>
        private void Calculate(CalculationControl control, Dictionary<string, object> resultsContainer, List<ExpressionEvaluatorException> exceptionList)
        {
            ApplicationDataPath absolutePath = control.CreatePathTemplate(this.controlList);
            if (control.IsRepeaterDescendant(this.controlList))
            {
                ApplicationDataPath relativePath = new ApplicationDataPath(absolutePath);
                this.CalculateRepeater(control, relativePath, absolutePath, resultsContainer, this.Application.ApplicationData, exceptionList);
                return;
            }

            try
            {
                resultsContainer[control.Name] = this.Evaluate(control.CalculationExpression, absolutePath);
                this.Application.ApplicationData.SetValue(control.Name, resultsContainer[control.Name], true);
            }
            catch (ExpressionEvaluatorException e)
            {
                e.Tag = control.Name;
                exceptionList.Add(e);
            }
        }