/// <summary> /// Builds an <c>AggregateCriteria</c> object. /// </summary> /// <param name="aggregateDefinitions">The collection of aggregate definitions.</param> /// <param name="sourceQueryCriteria">The data source query criteria.</param> /// <returns>Cebos.Veyron.SharedTypes.AggregateCriteria</returns> private static AggregateCriteria BuildAggregateCriteria(IEnumerable<AggregateDefinition> aggregateDefinitions, AggregateDataSourceQueryCriteria sourceQueryCriteria) { var criteria = new AggregateCriteria { ProcessName = sourceQueryCriteria.ProcessName, PageNumber = sourceQueryCriteria.PageNumber, PageSize = sourceQueryCriteria.PageSize, GroupColumn = sourceQueryCriteria.GroupColumn, SecurityColumns = sourceQueryCriteria.SecurityColumns != null ? new MobileList<SecurityColumnDescriptor>(sourceQueryCriteria.SecurityColumns) : null, Sortings = sourceQueryCriteria.Sortings, FilterId = sourceQueryCriteria.FilterId, FilterDefinition = sourceQueryCriteria.FilterDefinition, QuickFilterString = sourceQueryCriteria.QuickFilterString }; var definitionsByColumn = new Dictionary<string, List<AggregateDefinition>>(); foreach (var def in aggregateDefinitions) { List<AggregateDefinition> defList; if (!definitionsByColumn.TryGetValue(def.ColumnName, out defList)) definitionsByColumn[def.ColumnName] = defList = new List<AggregateDefinition>(); defList.Add(def); } foreach (var columnInfo in definitionsByColumn) { var aggregates = columnInfo.Value; var columnItem = new AggregateColumnItem { ColumnName = columnInfo.Key, CustomConverter = aggregates[0].CustomConverter, TargetType = aggregates[0].TargetType, TypeName = aggregates[0].TypeName, ConverterParameter = aggregates[0].ConverterParameter }; foreach (var aggrDef in aggregates) { columnItem.AggregatesEnabled.Add( new AggregateTypeInfo { SummaryType = aggrDef.SummaryType }); } criteria.Columns.Add(columnItem); } return criteria; }
/// <summary> /// Gets the value indicating whether source data from column specified should be modified before aggregated. /// </summary> /// <param name="columnItem">The column item.</param> /// <returns><c>true</c> if source value should be preprocessed, otherwise <c>false</c>.</returns> public static bool ContainsRawValue(AggregateColumnItem columnItem) { if (columnItem == null) throw new ArgumentNullException("columnItem", @"Column item is null"); if (columnItem.ColumnName == Constants.DerivedProcessDisplayNameColumnName) return true; var propertyType = Type.GetType(columnItem.TypeName); if (string.IsNullOrEmpty(columnItem.CustomConverter) || AfterBeforeList.Contains(propertyType)) { return false; } return true; }