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; }
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(); } }