he encontrado una solución que no se base en bucle a través de las columnas.
Utiliza el método 'Merge', que anteriormente había descartado porque pensaba que ambas tablas requerían la misma estructura.
En primer lugar es necesario crear una clave principal en los dos datos en tablas:
// set primary key
T1.PrimaryKey = new DataColumn[] { T1.Columns["DateStamp"] };
T2.PrimaryKey = new DataColumn[] { T2.Columns["DateStamp"] };
A continuación, agregue las dos tablas a un así una relación de conjunto de datos se pueden añadir:
// add both data-tables to data-set
DataSet dsContainer = new DataSet();
dsContainer.Tables.Add(T1);
dsContainer.Tables.Add(T2);
Siguiente añadir la relación entre las dos columnas de clave en el conjunto de datos:
// 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, puede ahora copiar el primer los datos de la tabla en una nueva versión de 'combinado', y luego se funden en el segundo:
// populate combined data
DataTable dtCombined = new DataTable();
dtCombined = T1.Copy();
dtCombined.Merge(T2, false, MissingSchemaAction.Add);
Nota: El método Merge requiere que el segundo argumento que es falsa o de lo contrario las copias de la estructura, pero no los datos de la segunda mesa.
Esto entonces combinar las siguientes tablas:
T1 (2012-05-09, 111, 222)
T2 (2012-05-09, 333, 444, 555)
en una versión combinada basada en la clave principal:
J1 (2012-05-09, 111, 222, 333, 444, 555)
¿Se puede usar "linq"? –
¿Podría dar un ejemplo de algunos datos que serían el resultado que desea? –
No creo que Linq sea una opción, ya que necesitaría saber los nombres de las columnas en las que intentaba proyectarse. – finoutlook