ho trovato una soluzione che non si basa su loop attraverso le colonne.
Utilizza il metodo "Unisci", che in precedenza avevo archiviato poiché pensavo che entrambe le tabelle richiedessero la stessa struttura.
In primo luogo è necessario creare una chiave primaria su due data-tabelle:
// set primary key
T1.PrimaryKey = new DataColumn[] { T1.Columns["DateStamp"] };
T2.PrimaryKey = new DataColumn[] { T2.Columns["DateStamp"] };
Quindi aggiungere entrambe le tabelle ad un modo un rapporto di set di dati possono essere aggiunti:
// add both data-tables to data-set
DataSet dsContainer = new DataSet();
dsContainer.Tables.Add(T1);
dsContainer.Tables.Add(T2);
Successivo aggiungi la relazione tra le due colonne chiave nel set di dati:
// add a relationship between the two timestamp columns
DataRelation relDateStamp = new DataRelation("Date", new DataColumn[] { T1.Columns["DateStamp"] }, new DataColumn[] { T2.Columns["DateStamp"] });
dsContainer.Relations.Add(relDateStamp);
Finalmente ora è possibile copiare il primo tabella dati in una nuova versione 'combinato', e poi immettersi nella seconda:
// populate combined data
DataTable dtCombined = new DataTable();
dtCombined = T1.Copy();
dtCombined.Merge(T2, false, MissingSchemaAction.Add);
Nota: Il metodo di unione richiede il secondo argomento essere falso altrimenti copia la struttura, ma non i dati del secondo tavolo.
Questo sarebbe poi combinare le seguenti tabelle:
T1 (2012-05-09, 111, 222)
T2 (2012-05-09, 333, 444, 555)
in una versione combinata basata sul-chiave primaria:
J1 (2012-05-09, 111, 222, 333, 444, 555)
Si può usare "linq"? –
Puoi dare un esempio di alcuni dati che sarebbero il risultato che vuoi? –
Non penso che Linq sia un'opzione in quanto è necessario conoscere i nomi delle colonne in cui si stava tentando di proiettarle. – finoutlook