public virtual List <dynamic> Execute(QueryExpression query, Dictionary <string, AggregateType> attributeAggs, List <string> groupFields) { var queryResolver = _queryResolverFactory.Get(query); query.ColumnSet.Columns.Clear(); query.ColumnSet.AddColumns(attributeAggs.Keys.ToArray()); query.ColumnSet.AddColumns(groupFields.ToArray()); if (query.Orders.NotEmpty()) { query.Orders.Clear(); } var sqlString = queryResolver.ToSqlString(); List <string> selectFields = new List <string>(); //List<string> groupFields = new List<string>(); foreach (var a in attributeAggs) { selectFields.Add(DataFieldExpressionHelper.GetAggregationExpression(a.Value, a.Key) + " AS " + a.Key + (Enum.GetName(typeof(AggregateType), a.Value))); } var nameFields = new List <string>(); foreach (var gf in groupFields) { var attr = queryResolver.AttributeList.Find(n => n.Name.IsCaseInsensitiveEqual(gf)); var nameField = attr.GetNameField(); if (!gf.IsCaseInsensitiveEqual(nameField)) { nameFields.Add(nameField); } } groupFields.AddRange(nameFields); sqlString = string.Format("SELECT {0} FROM ({2}) a GROUP BY {1}", string.Join(",", selectFields.Concat(groupFields)).ToLower(), string.Join(",", groupFields).ToLower(), sqlString); return(_dataRepository.ExecuteQuery(sqlString, queryResolver.Parameters.Args.ToArray())); }
public virtual List <dynamic> Execute(AggregateExpression agg) { var queryResolver = _queryResolverFactory.Get(agg); var sqlString = queryResolver.ToSqlString(); List <string> selectFields = new List <string>(); foreach (var a in agg.AggregateFields) { selectFields.Add(DataFieldExpressionHelper.GetAggregationExpression(a.AggregateType, a.AttributeName) + " AS " + a.AttributeName); } sqlString = string.Format("SELECT {0} FROM ({1}) a", string.Join(",", selectFields).ToLower(), sqlString); return(_dataRepository.ExecuteQuery(sqlString, queryResolver.Parameters.Args.ToArray())); }