public static ResponseFile Csv(Context context, SiteSettings ss, Export export) { ss.SetExports(context: context); ss.JoinedSsHash.Values.ForEach(currentSs => currentSs .SetChoiceHash(context: context, all: true)); var data = new Dictionary <long, Dictionary <long, Dictionary <int, string> > >(); Dictionary <long, long> keys = null; var keyColumns = KeyColumns(export, ss.SiteId); var view = Views.GetBySession(context: context, ss: ss); switch (ss.ReferenceType) { case "Issues": keys = IssueData( context: context, ss: ss, data: data, where : view.Where(context: context, ss: ss), orderBy: view.OrderBy( context: context, ss: ss, orderBy: Rds.IssuesOrderBy() .UpdatedTime(SqlOrderBy.Types.desc)), export: export, keys: keys, keyColumns: keyColumns); break; case "Results": keys = ResultData( context: context, ss: ss, data: data, where : view.Where(context: context, ss: ss), orderBy: view.OrderBy( context: context, ss: ss, orderBy: Rds.ResultsOrderBy() .UpdatedTime(SqlOrderBy.Types.desc)), export: export, keys: keys, keyColumns: keyColumns); break; } export.Join?.ForEach(link => { var currentSs = ss.JoinedSsHash.Get(link.SiteId); switch (currentSs.ReferenceType) { case "Issues": keys = IssueData( context: context, ss: currentSs, data: data, where : Rds.IssuesWhere().IssueId_In(keys.Values), orderBy: null, export: export, keys: keys, keyColumns: keyColumns); break; case "Results": keys = ResultData( context: context, ss: currentSs, data: data, where : Rds.ResultsWhere().ResultId_In(keys.Values), orderBy: null, export: export, keys: keys, keyColumns: keyColumns); break; } }); var csv = new System.Text.StringBuilder(); if (export.Header == true) { csv.Append(export.Columns.Select(column => "\"" + column.GetLabelText() + "\"").Join(","), "\n"); } data .FirstOrDefault(o => o.Key == ss.SiteId) .Value? .ForEach(dataRow => csv.Append(export.Columns.Select(column => data .Get(column.SiteId)? .Get(dataRow.Key)? .Get(column.Id) ?? string.Empty).Join(",") + "\n")); return(new ResponseFile( fileContent: csv.ToString(), fileDownloadName: FileName( context: context, ss: ss, name: export.Name))); }