Просто опубликуйте это как решение: добавьте некоторые примечания к комментариям и постам уже.
Метод Merge Table, упомянутый BFree, является очень хорошим методом для использования, и я думаю, что это правильный подход, не говоря уже о том, что он очень простой и элегантный.
Вот мои записи о том, почему, и я не уверен, что кто-то из них поймал хиты на сервере для запроса.
Оператор заявил в своих комментариях к BFree, что ему нужно будет скопировать таблицу, чтобы сделать то, что ему нужно, конечно, какую именно таблицу я не уверен, потому что его код:
foreach (DataRow row in data.Rows)
Эти строки взяты из его таблицы, называемой данными, где требуется копия для этого - у него уже есть.
Тогда вот что-то, что попирает прямо на КАЖДУЮ итерацию этого цикла:
SlowLoadingData slow_stuff = slow_query_results[(int)row["id"]];
Действительно ли ОП запрашивает базу данных каждую итерацию этих строк (что, если это большая таблица, мы говорим 100 000 строк +).
Подумайте о нагрузке на сервер (его приложение также должно генерировать этот запрос!), А также об объеме трафика, который он размещает в сети для этого!
ЕСЛИ это единственное приложение, может быть, все в порядке, но даже при этом это не то, что я бы предпочел сделать, если бы я хотел быть эффективным.
Если сбор данных из базы данных в одном запросе кажется многим - тогда, возможно, лучшим способом было бы скомпоновать его данные и выполнить слияние.
SlowLoadingData Page1_SlowLoadingData = slow_query_results[Page1] as DataTable;
data.Merge(Page1_SlowLoadingData);
SlowLoadingData Page2_SlowLoadingData = slow_query_results[Page2] as DataTable;
data.Merge(Page2_SlowLoadingData);