Diferencias entre dos datatables

Este es un interesante script que devuelve la diferencia entre dos datatables. Su funcionamiento es similar a realizar un LEFT JOIN en Transact SQL. La diferencia es que en este método, utilizamos el objeto DataRelation de .NET. He tenido que utilizar este método ya que los origenes de los datatables, son de conexiones direferentes, por lo que la utilización de LEFT JOIN, no es posible.

///
/// Devuelve un datatable con las diferencias entre los datatables de entrada
///
///
1er datatable ///
2o datatable ///
public static DataTable Difference(DataTable First, DataTable Second)
{
//creamos una tabla vacia
DataTable table = new DataTable(“Diferencias”);

//creamos un dataSet para poder utilizar el objeto DataRelation
using (DataSet ds = new DataSet())
{
//añadimos una copia de las tablas
ds.Tables.AddRange(new DataTable[] { First.Copy(), Second.Copy() });
//creamos un dataColumn con las columnas del datatable 1.
DataColumn[] firstcolumns = new DataColumn[ds.Tables[0].Columns.Count];
for (int i = 0; i < firstcolumns.Length; i++)
{
firstcolumns[i] = ds.Tables[0].Columns[i];
}

DataColumn[] secondcolumns = new DataColumn[ds.Tables[1].Columns.Count];
for (int i = 0; i < secondcolumns.Length; i++)
{
secondcolumns[i] = ds.Tables[1].Columns[i];
}
//creamos la relación
DataRelation r = new DataRelation(string.Empty, firstcolumns, secondcolumns, false);
ds.Relations.Add(r);

//creamos las columnas en el datatable a devolver.
for (int i = 0; i < First.Columns.Count; i++)
{
table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);
}

//si la primera fila no esta en la segunda tabla, la añadimos a la tabla.
table.BeginLoadData();
foreach (DataRow parentrow in ds.Tables[0].Rows)
{
DataRow[] childrows = parentrow.GetChildRows(r);
if (childrows == null || childrows.Length == 0)
table.LoadDataRow(parentrow.ItemArray, true);
}
table.EndLoadData();
}

return table;
}

Anuncios

Una respuesta to “Diferencias entre dos datatables”

  1. Sergio Says:

    Gracias por el aporte, lo voy a probar.
    Saludos

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: