Filtrado de tabla de datos para múltiples valores
Pregunta
Tengo 2 tablas de datos objdatatable1 y objdatatable2.
Necesito filtrar los datos en objdatatable2 de modo que market_id en objdatatable2 no deba estar en objdatatable1.
Incluso estoy dispuesto a abrir linq, que filtrará los contactos que no estén en la cláusula.
Solución
Esto se copia en DataTable dt
todas las filas de objectdatatable2
que tienen valores en el campo 'market_id' que no aparecen en un campo del mismo nombre en objectdatatable1
.En esta edición, el campo 'market_id' es de tipo string
en objectdatatable2
y de tipo int
en objectdatatable1
.
// This creates an empty DataTable with the same structure as objdatatable2.
DataTable dt = objdatatable2.Clone();
var results = objdatatable2.AsEnumerable().Where(r2 => !objdatatable1.AsEnumerable().Any(r1 => (r2.Field<string>("market_id") == r1.Field<int>("market_id").ToString())));
// Copy results to the DataTable only if there are results.
if (results.Count() > 0) {
dt = results.CopyToDataTable();
}
Otros consejos
objdatatable2.AsEnumerable().SkipWhile(dr2 => { return objdatatable1.AsEnumerable().Any(dr1 => { return (dr1.Field<String>("market_id ") == dr2.Field<String>("market_id ")); }) });