Вы должны были упомянуть LinqToSql, когда задавали вопрос, тогда вы бы получили несколько ответов, чтобы заглянуть в вашу базу данных, чтобы убедиться, что это длительный запрос, или повторные запросы туда и обратно
private static DataTable CreateTableFromReportDataColumns(Report report)
{
DataTable table = new DataTable();
table.Columns.Add("DataStream");
IEnumerable<string> moreColumns = report.ReportDatas
.SelectMany(z => z.ReportDataColumns)
.Select(x => x.Name)
.Where(s => s != null && s != "")
.Distinct();
foreach (string col in moreColumns)
{
table.Columns.Add(col);
}
return table;
}
Кроме того, перехватите запрос, выполненный с помощью средства профилирования sql. Затем проанализируйте ввод-вывод и время запроса, выполнив его с этими операторами до
SET STATISTICS TIME ON
SET STATISTICS IO ON
--your query here
Наконец, вам может понадобиться один или два индекса, чтобы остановить ввод-вывод. Здесь важен порядок столбцов.
CREATE INDEX IX1_ReportData ON ReportData(ReportID, Id)
CREATE INDEX IX1_ReportDataColumn ON ReportDataColumn(ReportDataId, Name)