In primo luogo ho bisogno di ottenere tutti i dati da ODBC (questo funziona già).
Poi arriva la parte più complicata che non sono ancora sicuro di come si possa fare. Esistono due tabelle di dati in ODBC. Le sto unendo al mio codice attuale e le sto filtrando con determinati parametri.
Tabella 1 nel database:
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
Tabella 2 nel database:
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
Dati uniti La tabella è simile alla seguente:
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
Tuttavia i dati di output uniti La tabella dovrebbe apparire così (per avere la possibilità di lavorarci ulteriormente):
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
Trova duplicati in NAME
. Lasciare solo uno di essi, assegnare un numero dalla Tabella 1 alla NRO
Tabella 2 a NRO1
. I numeri della tabella 1 devono essere presenti NRO
, i numeri della tabella 2 devono essere presenti NRO1
.
Dopo essermi connesso a ODBC, sto compilando una tabella con i dati della tabella 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);
}
quindi sto ricevendo dati da un'altra Tabella 2 e li unendo per:
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);
}
Dopo di che sto eseguendo il filtraggio (ho bisogno di avere solo righe che iniziano con 4 e 1 in NRO
, ci sono anche righe con altro numero iniziale):
DataTable results = dataTable.Select("ACTIVE = '1' AND (NRO Like '1%' OR NRO Like '4%')").CopyToDataTable();
Quindi sto aggiungendo un'altra colonna per NRO1
(questo sta anche aggiungendo zeri (0) non ne ho bisogno nella colonna 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
}
Posso catturare duplicati con questo codice
var duplicates = results.AsEnumerable().GroupBy(r => r[2]).Where(gr => gr.Count() > 1);
ma come eseguire il resto? Questo dovrebbe essere eseguito da un ciclo con la costruzione di una nuova tabella? Come posso eseguire l'unione e la rimozione di duplicati dataTable
?
NAME
. Se più di due - errore (gestore errori). 2. Nel mio esempio si è verificato un errore, l'ho risolto ora. Grazie per averlo menzionato, è importante.
dataTable
contenere più di due duplicati per un nome? Ad esempio, è possibile esistere tre duplicati per BMW? 2. Come possiamo definire quali dei record duplcate conservare e quali eliminare? Ad esempio, possiamo tenere un registro con il minimoNRO
ed eliminare l'altro record.