private void AddDateTimeColumnsByFormat(string dateTimeFormat) { SortedDictionary <int, string> dateTimeFormats = GetSortedDateTimeFormats(dateTimeFormat); int index = 0; foreach (int key in dateTimeFormats.Keys) { var format = dateTimeFormats[key]; string alias = "DatePart" + index; EntitySchemaDatePartQueryFunctionInterval interval = DashboardDataUtils.GetDatePartInterval(format); EntitySchemaQueryExpression columnExpression = EntitySchemaQuery.CreateSchemaColumnExpression(Esq.RootSchema, ColumnPath); columnExpression.UId = Guid.NewGuid(); var queryFunction = new EntitySchemaDatePartQueryFunction(Esq, interval, columnExpression); queryFunction.SpecifyQueryAlias(alias); columnExpression.ParentQuery = queryFunction.ParentQuery; var esqExpression = new EntitySchemaQueryExpression(queryFunction) { UId = Guid.NewGuid() }; EntitySchemaQueryColumn column = Esq.AddColumn(esqExpression.Function); var map = new Dictionary <string, object>(); map["format"] = format; map["valueAlias"] = alias; entityColumnsMap[alias] = map; if (OrderByGroupField) { ApplyColumnOrder(column); } index++; } }
private SortedDictionary <int, string> GetSortedDateTimeFormats(string dateTimeFormat) { var priorityDict = new SortedDictionary <int, string>(); string[] dateTimeFormats = dateTimeFormat.Split(';'); foreach (var format in dateTimeFormats) { EntitySchemaDatePartQueryFunctionInterval interval = DashboardDataUtils.GetDatePartInterval(format); priorityDict.Add(GetOrderPriority(interval), format); } return(priorityDict); }
/// <summary> /// Adds filter(s) for column date part(s). /// </summary> /// <param name="filterColumn">Column for filtration</param> /// <param name="filterValue">Stringified JSON object with values</param> /// <param name="dateTimeFormat">Date parts separated by ';'</param> public void AddDatePartFilter(string filterColumn, string filterValue, string dateTimeFormat) { string[] dateTimeFormats = dateTimeFormat.Split(';'); var filterValueObj = (JObject)Json.Deserialize(filterValue); EntitySchemaQueryExpression columnExpression = Esq.CreateSchemaColumnExpression(filterColumn); foreach (var format in dateTimeFormats) { var datePartValue = filterValueObj.Value <int>(format); EntitySchemaDatePartQueryFunctionInterval interval = DashboardDataUtils.GetDatePartInterval(format); var filter = GetDatePartFilter(columnExpression, datePartValue, interval); Esq.Filters.Add(filter); } }