C# Настольное приложение - динамическое обновление запроса из одной таблицы в другую - PullRequest
0 голосов
/ 19 марта 2020

Я работаю над настольным приложением 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 способ и с несколькими столбцами (количество столбцов будет определяться во время выполнения на основе выбора пользователя)

...