Em primeiro lugar, preciso obter todos os dados do ODBC (isso já está funcionando).
Depois vem a parte mais complicada que ainda não tenho certeza de como isso pode ser feito. Existem duas tabelas de dados no ODBC. Estou mesclando-os com o meu código atual e filtrando-os com certos parâmetros.
Tabela 1 no banco de dados:
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
Tabela 2 no banco de dados:
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
A tabela de dados mesclada fica assim:
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
No entanto, o dataTable de saída mesclado deve ter esta aparência (para ter a possibilidade de trabalhar com ele ainda mais):
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
Encontre duplicatas em NAME
. Deixe apenas um deles, atribua um número da Tabela 1 a NRO
da Tabela 2 a NRO1
. Quadro 1 os números devem ser em NRO
, Tabela 2 os números devem ser em NRO1
.
Após conectar-me ao ODBC, estou preenchendo uma tabela com dados da Tabela 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);
}
então estou obtendo dados de outra Tabela 2 e os mesclando por:
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);
}
Depois disso, estou realizando a filtragem (preciso ter linhas iniciando apenas com 4 e 1 pol. NRO
, Também há linhas com outro número inicial):
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
Então estou adicionando mais uma coluna para NRO1
(isso também está adicionando zeros (0), não preciso deles na coluna 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
}
Eu posso pegar duplicatas com este código
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
mas como fazer o resto? Isso deve ser realizado por um loop com a construção de uma nova tabela? Como posso realizar a junção e a remoção de duplicatas dataTable
?
NAME
. Se mais de dois - erro (manipulador de erros). 2. Houve um erro no meu exemplo, eu o corrigi agora. Obrigado por mencionar este, é importante.
dataTable
conter mais de duas duplicatas para algum nome? Por exemplo, é possível existir três duplicatas para a BMW? 2. Como podemos definir quais registros duplicados manter e quais excluir? Por exemplo, podemos manter o registro com o mínimoNRO
e excluir o outro registro.