Получить разные строки в двух типизированных DataTables с другой схемой - PullRequest
0 голосов
/ 16 июля 2011

Как получить все строки из TableA, которых нет в TableB, где схема TableA отличается от TableB (это разные типизированные классы DataTable, приходящиеся на разные dbms)?

enter image description here enter image description here

Мне нужны все country строки, где country_id не находится в Country как idCountry.

Это не работает, потому что у них другая схема (src.country и dest.Country - это разные DataTable-классы):

Dim srcNotInDest = src.country.Except(dest.Country)

src и dest - строго типизированные наборы данных

Примечание: не обязательно VB.NET

Я предполагаю, что мне нужно предоставить IEqualityComparer в качестве второго параметра, но не знаю как.Возможно, есть другой (более быстрый) подход для определения новых строк.

Фон :

Я импортирую таблицы из базы данных MySQL в базу данных SQL-Server.Достаточно проверить только первичный ключ и не сравнивать содержимое строк.Хотя в этом примере таблица содержит всего несколько строк, а две таблицы содержат ~ 100000 строк, следовательно, производительность влияет на синхронизацию источника и назначения.

1 Ответ

1 голос
/ 16 июля 2011

Если это разные базы данных, я думаю, вам нужно получить идентификаторы отдельно и сравнить их в памяти, например (в синтаксисе C #)

    var t1 = (from r in src.country  select r.country_id).ToList();
    var t2 = (from r in dest.Country select r.idCountry).ToList();

    var missing = t1.Except(t2);

производительность имеет значение при синхронизации источника

Если бы это был однократный процесс миграции, то даже если эта процедура занимает несколько секунд, это, вероятно, было бы приемлемо. Но вы упомянули «синхронизировать», так что я предполагаю, что это не единичный случай, поэтому приемлемость этого зависит от того, как часто он запускается.

Быстрый тест на моей машине, читающий 200 000 в одной таблице, 100 000 в другой (по общему признанию в той же базе данных sql) и сравнение их, занимает 0,4 секунды. Есть, конечно, другие факторы, которые необходимо учитывать, например, нагрузка на сервер SQL и т. Д.

...