Te he hecho un ejemplo que creo que podría servirte.
// Se obtienen los elementos de la columna 3 para saber el grupo de la dt2 List<int> a = dt2.Rows.OfType<DataRow>().Select(x => (int)x.ItemArray[3]).ToList(); // Se obtienen todas las filas de la dt1 en las que el valor de la columna 3 es distinto a las de la tabla dt2 List<DataRow> b = dt1.Rows.OfType<DataRow>().Where(x => (int)x.ItemArray[3] != a[0]).ToList();
Como puedes ver, obtengo los valores de la tabla dt2 en la col 4 (yo he puesto para el ejemplo que la columna era la 4, y que su valor es un int) y en la segunda consulta obtengo todas las filas en las que su valor de la columna 4 sea distinto al primer valor de la lista obtenida anteriormente (ya que en la dt2 todos son iguales). Acuérdate de comprobar que la lista a tiene valores, que yo no lo he hecho, y si no tuviera, a[0] podría dar una excepción.
Así ya tendrías una lista con todas las filas que cumplen la condición que quieres.
Espero que te sirva, salu2!!
Jose Alberto Marti