private IEnumerable<IEnumerable<string>> Aggregate(OutputData data, InputData inputData) { var groups = ExtractGroupCombinations(inputData.Configuration.GroupVariables.ToList()) .Distinct(comparer) .ToList(); var tables = GetTables(data).ToList(); yield return GetHeaders(groups.SelectMany(g => g.Select(t => t.Name)).Distinct(), tables.First()); for (var i = 0; i < groups.Count; i++) { yield return GetRow(groups[i], tables[i]); } }
private IEnumerable<GroupTable> GetTables(OutputData data) { var result = new List<GroupTable>(); var table = new List<List<string>>(); foreach (var row in data.Rows.ToCompleteList().Where(IsMeaningRow)) { if (row.IsEmptyStringCollection() && table.Any()) { result.Add(new GroupTable(table.ToList())); table.Clear(); continue; } table.Add(row.ToList()); } result.Add(new GroupTable(table.ToList())); table.Clear(); return result; }