Exemple #1
0
        private T EvaluateFromContext(IExpressionContext context)
        {
            var state = new AggregationState();

            if (Arguments.Count > 0)
            {
                object data = Arguments[0] != null ? Arguments[0].Evaluate(context) : null;
                state.DataSet = data as IEnumerable;
            }

            if (state.DataSet == null)
            {
                if (context.ContextObject is IEnumerable)
                {
                    state.DataSet = context.ContextObject as IEnumerable;
                }
                else
                {
                    return(default(T));
                }
            }

            if (Arguments.Count > 1)
            {
                state.ValueExpression = Arguments[1];
            }

            var args = new object[0];

            if (Arguments.Count > 2)
            {
                args = new object[Arguments.Count - 2];
                for (int i = 2; i < Arguments.Count; i++)
                {
                    args[i - 2] = Arguments[i].Evaluate(context);
                }
            }

            return(EvaluateFunction(context, state, args));
        }
Exemple #2
0
        protected virtual T EvaluateFunction(IExpressionContext context, AggregationState state, params object[] args)
        {
            state.CanReturn = false;
            foreach (object dataItem in state.DataSet)
            {
                var    childContext = new ChildExpressionContext(context, dataItem);
                object childVal     = state.ValueExpression != null?state.ValueExpression.Evaluate(childContext) : dataItem;

                state.DataItem = dataItem;

                AggregateValue(childVal, state, args);

                //allow function to short circuit if it already
                //knows the answer.
                if (state.CanReturn)
                {
                    break;
                }

                state.CurrentIndex++;
            }

            return(ExtractAggregateValue(state));
        }
Exemple #3
0
 protected abstract T ExtractAggregateValue(AggregationState aggregationState);
Exemple #4
0
 protected abstract void AggregateValue(object value, AggregationState aggregationState, params object[] args);
Exemple #5
0
 protected override double ExtractAggregateValue(AggregationState aggregationState)
 {
     return(aggregationState.GetValue <double>("value"));
 }
 protected override bool ExtractAggregateValue(AggregationState aggregationState)
 {
     return(aggregationState.GetValue <bool>("value"));
 }
Exemple #7
0
 protected override int ExtractAggregateValue(AggregationState aggregationState)
 {
     return aggregationState.GetValue<int>("count");
 }
Exemple #8
0
 protected override IList <object> ExtractAggregateValue(AggregationState aggregationState)
 {
     return(aggregationState.GetValue <List <object> >("results"));
 }