Я работаю над настольным приложением c#. Net, использующим IDE Visual Studio 2019. У меня есть две таблицы в SQLite, каждая из которых содержит около 1 миллиона записей в каждой. Я должен обновить несколько столбцов таблицы A из таблицы B на основе некоторых совпадений. Я также загрузил записи в DATATABLES тоже для локальной обработки.
Критерии поиска и обновления полей время от времени меняются, поэтому мне приходится создавать динамические c запросы.
У меня есть записи в таблицах, а также загруженные в таблицы данных. Поэтому любой подход к обновлению с помощью прямых запросов к таблицам или локальной обработки в DATATABLES приветствуется.
Придерживайтесь следующих подходов:
Подход 1 с использованием запроса: Найдено в поиске Google, что мы можем обновить записи из одного таблица в другую таблицу легко по одному запросу в SQL, но мы не можем обновить записи из одной таблицы в другую в SQLite. Я попробовал подход с использованием запросов, но позже потерпел неудачу и обнаружил, что SQLite не поддерживает.
Я также пытался обновлять записи одну за другой в l oop, запросы вставки в l oop очень быстрые ( потребовалось всего 4-5 секунд для записи 200К). Но запрос на обновление в l oop очень медленный и занимает около 9 записей в секунду. Это займет несколько часов, чтобы обновить все записи.
Подход 2 с использованием Linq:
Схемы обеих таблиц не совпадают, но имеют ссылки, основанные на нескольких столбцах.
string field1 = "A";
string field2 = "B";
var updateQuery = from r1 in table1Data.AsEnumerable()
join r2 in table2Data.AsEnumerable()
on r1.Field<string>(field1) equals r2.Field<string>(field2)
select new { r1, r2 };
Это прекрасно работает для одного поля но мне нужен динамический c способ и с несколькими столбцами (количество столбцов будет определяться во время выполнения на основе выбора пользователя)