Exemplo n.º 1
0
        public GroupInfo AddData(GroupingDefinition definition, List<CalculateDefinition> listCalculateDefinition, List<TransactionInfo> transactionInfo)
        {
            var root = new GroupInfo()
            {
                Key = string.Empty,
                ListData = transactionInfo,
                InnerGroupData = new Dictionary<string, GroupInfo>(),
                ListCalculateDefinition = listCalculateDefinition,
            };
            root.RefreshCalculateValue();
            AddDataGroup(root, definition);

            return root;
        }
Exemplo n.º 2
0
        private void AddDataGroup(GroupInfo root, GroupingDefinition definition)
        {
            foreach (var info in root.ListData)
            {
                string rootKey = root.Key;
                string groupKey = GetItemKey(definition.GetKeyMethod, info);
                string key = GetKey(rootKey, groupKey);

                GroupInfo groupInfo = null;
                if (!root.InnerGroupData.TryGetValue(key, out groupInfo))
                {
                    groupInfo = new GroupInfo()
                    {
                        RootKey = rootKey,
                        GroupKey = groupKey,
                        Key = key,
                        GroupingDefinition = definition,
                        ListData = new List<TransactionInfo>(),
                        InnerGroupData = new Dictionary<string, GroupInfo>(),
                        ListCalculateDefinition = root.ListCalculateDefinition
                    };
                    root.InnerGroupData.Add(key, groupInfo);
                }

                groupInfo.ListData.Add(info);
            }

            foreach (var groupInfoInner in root.InnerGroupData.Values)
            {
                if (definition.InnerDefinition != null)
                {
                    AddDataGroup(groupInfoInner, definition.InnerDefinition);
                }
                groupInfoInner.RefreshCalculateValue();
            }
        }