protected virtual DbFunctionAggregate VisitFunctionAggregate(DbFunctionAggregate aggregate) { var result = aggregate; if (aggregate != null) { var newFunction = VisitFunction(aggregate.Function); var newArguments = VisitExpressionList(aggregate.Arguments); Debug.Assert(newArguments.Count == 1, "Function aggregate had more than one argument?"); if (!ReferenceEquals(aggregate.Function, newFunction) || !ReferenceEquals(aggregate.Arguments, newArguments)) { if (aggregate.Distinct) { result = CqtBuilder.AggregateDistinct(newFunction, newArguments[0]); } else { result = CqtBuilder.Aggregate(newFunction, newArguments[0]); } } } return(result); }
private SqlFragment HandleFunction(DbFunctionAggregate fa, SqlFragment arg) { Debug.Assert(fa.Arguments.Count == 1); if (fa.Function.NamespaceName != "Edm") throw new NotSupportedException(); FunctionFragment fragment = new FunctionFragment(); fragment.Name = fa.Function.Name; if (fa.Function.Name == "BigCount") fragment.Name = "COUNT"; else fragment.Name = fa.Function.Name.ToUpperInvariant(); fragment.Distinct = fa.Distinct; fragment.Argmument = arg; return fragment; //return new CastExpression(aggregate, GetDbType(functionAggregate.ResultType.EdmType)); }