/// <summary> /// Creates instance of query aggregate function. /// </summary> /// <param name="function">Sql function name</param> /// <param name="key">Sql function keyword (ALL, DISTINCT)</param> /// <param name="expression"></param> public QueryAggregate(QueryAggregateFunction function, QueryKey key, object expression) { // Initialization. QueryFunction = function; Expression = expression; QueryKey = key; }
/// <summary> /// Creates instance of query aggregate function. /// </summary> /// <param name="function">Sql function</param> /// <param name="parameters">Function parameters and expressions</param> public QueryFunction(QueryAggregateFunction function, params object[] parameters) { // Initialize. PartOfGroupBy = false; FunctionName = function.ToString().ToUpper(); SeperateParameters(parameters); }
public string GenerateAggregateQuery(DatabaseQuery query, QueryAggregateFunction function, string propertyName) { var sqlFunction = function.ToString(); var columnValueExpression = MapColumn(propertyName); if (function == QueryAggregateFunction.Average) { sqlFunction = "AVG"; var propertyType = query.EntityType.GetProperty(propertyName).PropertyType; if (propertyType == typeof(int) || propertyType == typeof(int?)) { columnValueExpression = $"CAST({columnValueExpression} AS decimal)"; } } return($"SELECT {sqlFunction}({columnValueExpression}) FROM {GetTables()}" + GenerateWhere(query)); }
public object Aggregate(QueryAggregateFunction function, string propertyName) { return(Provider.Aggregate(this, function, propertyName)); }
/// <summary> /// Creates instance of query aggregate function. /// </summary> /// <param name="function"></param> /// <param name="key"></param> /// <param name="expression"></param> /// <param name="partitionExpression"></param> /// <param name="overExpression"></param> public QueryAggregate(QueryAggregateFunction function, string expression, string partitionExpression, string overExpression) { }
/// <summary> /// Creates instance of query aggregate function. /// </summary> /// <param name="function"></param> /// <param name="key"></param> /// <param name="expression"></param> public QueryAggregate(QueryAggregateFunction function, string[] expression, string[] overExpression) { }
public object Aggregate(DatabaseQuery query, QueryAggregateFunction function, string propertyName) { var command = GenerateAggregateQuery(query, function, propertyName); return(ExecuteScalar(command, CommandType.Text, GenerateParameters(query.Parameters))); }