Ваш процесс является стандартным процессом ETL. ETL расшифровывается как Extract, Transform, Load - это то, что вы делаете здесь. Существует много информации об ETL и о том, как их делать на inte rnet, я рекомендую вам прочитать его, если вы можете.
Для вашего случая стандартный процесс будет иметь специальный Таблица называется «промежуточной таблицей», куда вы загружаете новые данные в качестве первого шага. Затем вы можете использовать эту таблицу в своей БД для сравнения и обновления. Бизнес-правила для обновления «производственной таблицы» из «промежуточной таблицы» относительно просты по сравнению с написанием C# программы, которая читает и записывает из двух разных мест (текстовый файл и таблица БД), когда она пытается выполнить бизнес-правила.
Ваши бизнес-правила мне не понятны на 100%, но, похоже, если бы у вас была промежуточная таблица, их можно было бы выполнить с помощью одного запроса UPDATE в SQL (может быть, два, если вам нужно сделать несколько удаляет тоже.) Я думаю, вы уже можете видеть, что один запрос намного проще, чем logi c, который вы пытаетесь выяснить, чтобы он работал без промежуточной таблицы.
Так что это мой рекомендуемый подход здесь - составьте промежуточную таблицу, а затем сравните и обновите ее, используя эту таблицу.