Во-первых, мне нужно получить все данные из ODBC (это уже работает).
Затем следует самая сложная часть, которую я пока не знаю, как это можно сделать. В ODBC есть две таблицы данных. Я объединяю их с моим текущим кодом и фильтрую по определенным параметрам.
Таблица 1 в базе данных:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Таблица 2 в базе данных:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
Объединенная таблица данных выглядит следующим образом:
NRO NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
463 BMW E64 SE0 JR KE OT PG OL J8 9 1
123 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Однако объединенный выходной dataTable должен выглядеть так (чтобы иметь возможность работать с ним дальше):
NRO NRO1 NAME NAMEA NAMEB ADDRESS POSTA POSTN POSTADR COMPANYN COUNTRY ID ACTIVE
123 423 Fiat Punto 500 J5 K4 O3 P4 O2 JT 1 1
133 Opel Meriva FTG J5 K4 O3 P4 O2 JO 3 1
153 MB E200 C25 JN KI OP PY OR JD 5 1
183 463 BMW E64 SE0 JR KE OT PG OL J8 9 1
103 Audi S6 700 JP KU OU PN OH J6 11 1
Найти дубликаты в NAME
. Оставьте только один из них, присвойте номер из таблицы 1, NRO
из таблицы 2 - NRO1
. Номера таблиц 1 должны быть в NRO
, номера таблиц 2 должны быть в NRO1
.
После подключения к ODBC я заполняю одну таблицу данными из таблицы 1
DataTable dataTable = new DataTable("COMPANY");
using (OdbcConnection dbConnectionSE = new OdbcConnection(connectionStringSE))
{
dbConnectionSE.Open();
OdbcDataAdapter dadapterSE = new OdbcDataAdapter();
dadapterSE.SelectCommand = new OdbcCommand(queryStringSE, dbConnectionSE);
dadapterSE.Fill(dataTable);
}
затем я получаю данные из другой таблицы 2 и объединяю их:
using (OdbcConnection dbConnectionFI = new OdbcConnection(connectionStringFI))
{
dbConnectionFI.Open();
OdbcDataAdapter dadapterFI = new OdbcDataAdapter();
dadapterFI.SelectCommand = new OdbcCommand(queryStringFI, dbConnectionFI);
var newTable = new DataTable("COMPANY");
dadapterFI.Fill(newTable);
dataTable.Merge(newTable);
}
После этого я выполняю фильтрацию (мне нужно, чтобы строки были только с 4 и 1 NRO
, есть строки с другим начальным номером):
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
Затем я добавляю еще один столбец для NRO1
(это также добавляет нули (0), они мне не нужны в столбце NRO1
):
results.Columns.Add("NRO1", typeof(int)).SetOrdinal(1);
foreach (DataRow row in results.Rows)
{
//need to set value to NewColumn column
row["NRO1"] = 0; // or set it to some other value
}
Я могу поймать дубликаты с этим кодом
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
а как сделать остальное? Это должно быть выполнено циклом с созданием новой таблицы? Как я могу выполнить объединение и удаление дубликатов dataTable
?
NAME
. Если больше двух - ошибка (обработчик ошибок). 2. В моем примере произошла ошибка, сейчас я ее исправил. Спасибо за упоминание этого, это важно.
dataTable
содержать более двух дубликатов для одного имени? Например, возможно ли существование трех дубликатов для BMW? 2. Как мы можем определить, какие из дублирующих записей следует сохранить, а какие удалить? Например, мы можем вести запись с минимумомNRO
и удалить другую запись.