public ResultsData ExpandAndReorderColumns(List <string> quandlCodeColumns, string dateColumn, bool insertDateColumn) { // Expand the column header names var expandedHeaders = quandlCodeColumns.Select(qcc => { var splitString = qcc.Split("/".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); return(splitString.Length >= 3 ? new List <string> { qcc } : Headers.FindAll(x => x.StartsWith(qcc + '/')).ToList()); }).SelectMany(i => i).ToList(); expandedHeaders = SanitizeHeaders(expandedHeaders, dateColumn, insertDateColumn); // Re-order the columns appropriately var shuffledData = new List <List <object> >(); for (var r = 0; r < Data.Count; r++) { shuffledData.Add(new List <object>()); } foreach (var header in expandedHeaders) { var columnIndex = Headers.IndexOf(header); for (var r = 0; r < Data.Count; r++) { if (columnIndex == -1) { shuffledData[r].Add(null); } else { shuffledData[r].Add(Data[r][columnIndex]); } } } return(new ResultsData(shuffledData, expandedHeaders)); }