Код просто копирует все данные в выходной таблице, потому что выражение сравнения сравнивает одну и ту же строку и столбец с самим собой.
Вы можете решить проблему с помощью одного выражения Linq
private DataTable MatcherTable(DataTable table)
{
DataTable match = table.Rows.Cast<DataRow>()
.GroupBy(x => x["Name"])
.Where(g => g.Count() > 1)
.Select(k => k.FirstOrDefault())
.CopyToDataTable();
return match;
}
Здесь мы группируем строки, используя значение в столбце «Имя», и отфильтровываем все группы с числом вхождений менее 2. Затем мы берем первую строку из группы и строим последовательность Датарова, окончательно скопированную в выходную таблицу.
Приведенный выше код вернет только одну строку из дубликатов. Если вы хотите сохранить все повторяющиеся строки, тогда вам нужно
DataTable match = table.Rows.Cast<DataRow>()
.GroupBy(x => x["Name"])
.Where(g => g.Count() > 1)
.SelectMany(k => k)
.CopyToDataTable();