Skip to content

Hacer Join de 2 DataTables

by en 4 junio, 2015

Por motivos de pega tuve que hacer el join de 2 DataTables con largos dinámicos, pero un campo en común. En mi caso el campo Fecha, de tipo DateTime. La solución original estaba restringida a comparar por la columna id de tipo int, después de modificarla un poco quedó algo así.

public DataTable DataTableJoiner<T>(DataTable dt1, DataTable dt2, string nombreCampo)
{
    using (DataTable targetTable = dt1.Clone())
    {
        var dt2Query = dt2.Columns.OfType<DataColumn>().Select(dc => new DataColumn(dc.ColumnName, dc.DataType, dc.Expression, dc.ColumnMapping));
        var dt2FilterQuery = from dc in dt2Query.AsEnumerable()
                                where targetTable.Columns.Contains(dc.ColumnName) == false
                                select dc;
        targetTable.Columns.AddRange(dt2FilterQuery.ToArray());
        var rowData = from row1 in dt1.AsEnumerable()
                        join row2 in dt2.AsEnumerable() on row1.Field<T>(nombreCampo) equals row2.Field<T>(nombreCampo)
                        select row1.ItemArray.Concat(row2.ItemArray.Where(r2 => row1.ItemArray.Contains(r2) == false)).ToArray();
        foreach (object[] values in rowData)
            targetTable.Rows.Add(values);
        return targetTable;
    }
}
Dejar un comentario

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: