Example #1
0
        private AggregateExpressionBase BindAggregateExpressionToken(AggregateTokenBase aggregateToken)
        {
            switch (aggregateToken.Kind)
            {
            case QueryTokenKind.AggregateExpression:
            {
                AggregateExpressionToken token         = aggregateToken as AggregateExpressionToken;
                SingleValueNode          expression    = this.bindMethod(token.Expression) as SingleValueNode;
                IEdmTypeReference        typeReference = CreateAggregateExpressionTypeReference(expression, token.MethodDefinition);

                // TODO: Determine source
                return(new AggregateExpression(expression, token.MethodDefinition, token.Alias, typeReference));
            }

            case QueryTokenKind.EntitySetAggregateExpression:
            {
                EntitySetAggregateToken token = aggregateToken as EntitySetAggregateToken;
                QueryNode boundPath           = this.bindMethod(token.EntitySet);

                state.InEntitySetAggregation = true;
                IEnumerable <AggregateExpressionBase> children = token.Expressions.Select(x => BindAggregateExpressionToken(x)).ToList();
                state.InEntitySetAggregation = false;
                return(new EntitySetAggregateExpression((CollectionNavigationNode)boundPath, children));
            }

            default:
                throw new ODataException(ODataErrorStrings.ApplyBinder_UnsupportedAggregateKind(aggregateToken.Kind));
            }
        }
Example #2
0
        private AggregateExpression BindAggregateExpressionToken(AggregateExpressionToken token)
        {
            var expression = this.bindMethod(token.Expression) as SingleValueNode;

            if (expression == null)
            {
                throw new ODataException(ODataErrorStrings.ApplyBinder_AggregateExpressionNotSingleValue(token.Expression));
            }

            var typeReference = CreateAggregateExpressionTypeReference(expression, token.MethodDefinition);

            // TODO: Determine source
            return(new AggregateExpression(expression, token.MethodDefinition, token.Alias, typeReference));
        }