.NET Chronicles

Temas relacionados con el desarrollo de aplicaciones con .NET

Octavio Telis

Comparar dos DataTables según sus DataRows

Hola que tal.

En ocasiones es necesario comparar el contenido de dos DataTable para determinar qué registros (DataRow) están en una y en otra no.

Supongamos tenemos dos DataTable; dt1 y dt2, ambas con el mismo esquema. La tabla dt2 contiene más registros que la taba dt1, por lo que deseamos saber qué registros de dt2 no están incluidos en dt1 comparando por uno de los campos de los registros, en nuestro ejemplo el campo IdCliente. Para determinar esto utilizaremos la siguiente consulta:

DataTable dtRes = new DataTable();

dtRes = dt2.AsEnumerable()

    .Where(r =>

        !dt1.AsEnumerable().Any(w =>

            w.Field<int>(“IdCliente”) == r.Field<int>(“IdCliente”)))

        .CopyToDataTable<DataRow>();

 

Considerar que esta consulta devolverá los campos de dt2 que no están en dt1, si  se quiere el efecto contrario, modificaremos la expresión lambda quitando la negación de la consulta, quedando como sigue:

DataTable dtRes = new DataTable();

dtRes = dt2.AsEnumerable()

    .Where(r =>

        dt1.AsEnumerable().Any(w =>

            w.Field<int>(“IdCliente”) == r.Field<int>(“IdCliente”)))

        .CopyToDataTable<DataRow>();

 

Consideremos que la segunda consulta traerá todos los registros de dt2 que están en dt1, por lo que puede ser que la consulta devuelva todos los registros de dt1 o menos.

Si ninguna de las tablas tienen coincidencias entonces, devolverá 0 campos. Ambas tablas deben tener la misma estructura para que funcione.

Espero te sea de utilidad.

Saludos…

Octavio Telis

 

 

3 Responses to Comparar dos DataTables según sus DataRows

  • Yelinna says:

    Hermosa manera de usar linq, y muy práctica! Esta entrada ha ido directa a mis favoritos 馃榾

  • Alexis says:

    Me da un error en Any “Error 39 ‘System.Data.EnumerableRowCollection<System.Data.DataRow>’ no contiene una definición de ‘Any’ ni se encontró ningún método de extensión ‘Any’ que acepte un primer argumento de tipo ‘System.Data.EnumerableRowCollection<System.Data.DataRow>’ (¿falta una directiva de uso o una referencia de ensamblado?)”

  • Alexis says:

    Exelente aporte tenia un error en Any pero ya lo he solucionado. Me ha sido de gran utilidad Gracias

Leave a Reply

Your email address will not be published. Required fields are marked *


*

.NET Chronicles
  • Eventos del Teclado en WPF July 22, 2015
    聽 Hola 驴qu茅 tal? En esta ocasi贸n como como continuidad a lo que previamente hab铆a escrito sobre los eventos del teclado en Windows Forms, har茅 un art铆culo sobre el uso de los eventos del teclado en WPF, as铆 es en Windows Presentation Foundation. No es desconocido por muchos que el nuevo est谩ndar de desarrollo de […]
  • Programaci贸n Orientada a Objetos (Introducci贸n) May 14, 2014
    Hola qu茅 tal鈥 Aqu铆 les dejo este video sobre la programaci贸n orientada a objetos, a manera de pre谩mbulo a los siguientes videos, con las bases de la programaci贸n en C# y otra l铆nea con algunas utiler铆as. Saludos鈥 Octavio Telis
  • Cap铆tulo piloto del la versi贸n en video de .NET Chronicles May 6, 2014
    Hola qu茅 tal??? Pues en esta ocasi贸n estoy compartiendo con ustedes la liga de un video piloto, con el que pretendo comunicar un poco m谩s sobre las tecnolog铆as .NET y los lenguajes de Programaci贸n. En esta ocasi贸n ser谩 con la presentaci贸n de C#, en un capitulo titulado 鈥淭e presento a C#鈥, espero que sea de […]
  • Validaci贸n de datos de entrada con enlace a datos en WPF May 27, 2012
    Tweet Hola, qu茅 tal. Ya que he venido hablando del enlace a datos en WPF en las publicaciones anteriores, bien convendr铆a considerar el uso del Binding para validar datos, hemos tocado ya algunos puntos necesarios para escribir esta funcionalidad. En las publicaciones anteriores vimos ya como enlazar los datos, adem谩s, c贸mo convertir los datos, ahora, […]
  • Uso de la propiedad Visibility con valores booleanos en WPF May 25, 2012
    Tweet聽 聽 Hola que tal. En esta ocasi贸n quiero compartir con ustedes una manera para utilizar la propiedad Visibility con un valor bool. Te preguntar谩s 鈥溌縔 qu茅 sentido tiene eso?鈥, bien, el detalles est谩 en que en ocasiones se requiere que la visibilidad de un control de la interfaz de usuario responda a un valor […]
  • Conversi贸n de Valores con Enlace a Datos May 24, 2012
    Tweet聽聽 聽 Hola que tal. En el dise帽o de aplicaciones con WPF tendremos muchas ventajas en cuanto a la interfaz de usuario se refiere, dado que es un modelo muy flexible, nos permite dar formato y estilo a la apariencia de la interfaz de usuario, logrando aplicaciones m谩s agradables, vistosas y que mejoran por mucho […]
  • Mostrar archivos de imagen en WPF utilizando enlace a datos. May 23, 2012
    Tweet Holal Qu茅 tal. Continuando con el ejemplo del post anterior (http://bit.ly/oh0m9k), referente al manejo de im谩genes en WPF, ejemplificaremos el manejo de las im谩genes de la misma manera pero, esta vez, utilizando enlace a datos y la clase Binding. Antes, tenemos que hablar un poco de lo que es el enlace a datos con […]
  • Mostrar archivos de imagen en WPF August 26, 2011
    Hola Qu茅 Tal鈥 En esta ocasi贸n quiero comenzar una serie de art铆culos sobre el manejo de archivos de im谩genes con .NET. En esta primera parte voy a tratar la manera de cargar un archivo de imagen en un contenedor de imagen, en este caso usar茅 WPF y el control Image que viene incluido en el […]
  • Comparar dos DataTables seg煤n sus DataRows August 23, 2011
    Hola que tal. En ocasiones es necesario comparar el contenido de dos DataTable para determinar qu茅 registros (DataRow) est谩n en una y en otra no. Supongamos tenemos dos DataTable; dt1 y dt2, ambas con el mismo esquema. La tabla dt2 contiene m谩s registros que la taba dt1, por lo que deseamos saber qu茅 registros de […]
  • Arquitectura 鈥 Definici贸n de un Data Access Component (con un ejemplo) Parte 3 May 14, 2010
    Hola Qu茅 Tal? En esta ocasi贸n, no he dejado pasar tanto tiempo para terminar la trilog铆a del uso de Data Access Component con un ejemplo. Bien, pues en este art铆culo veremos el uso del componente ya creado, c贸mo extenderemos la funcionalidad del componente y c贸mo lo aplicamos en la interfaz de usuario. Primeramente, debemos crear […]