Ответ 1
Как насчет пользовательского типа ArrayEqualityComparer<T>
(например, здесь):
string[] colsToConsider = ...
var allDuplicates = dt.AsEnumerable()
.GroupBy(dr => colsToConsider.Select(dr.Field<object>)
.ToArray(),
new ArrayEqualityComparer<object>())
.Where(g => g.Count() > 1)
.SelectMany(g => g)
.CopyToDataTable();
Вы также можете рассмотреть использование Dictionary<TKey, TValue>
(и связанного словаря-сравнения), если вы обнаружите, что неявное использование индексов массивов здесь хакировано.