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)); } }
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)); }