Выберите всю повторяющуюся строку из datatable с помощью linq С#

Я могу заставить его вернуть один столбец, но я не могу понять, как заставить его дать мне всю строку, а не только значения столбца.

Help!!

поля, которые он должен вернуть, - это VDMList и Table.

var duplicates = dt.AsEnumerable()
    .Select(dr => dr.Field<string>("VMDList"))
    .GroupBy(x => x)
    .Where(g => g.Count() > 1)
    .Select(g => g.Key)
    .ToList();


columns of DT Table, VDMList
output is
4  | 02,2
12 | 03,3
15 | 02,2

Ответ 1

Следующий запрос вернет элемент first в group для строк с дубликатом VMDList. Обратите внимание, что нет критериев для выбора элемента first. Это может быть любая строка random.

var duplicates = dt.AsEnumerable()
    .GroupBy(dr => dr.Field<string>("VMDList"))
    .Where(g => g.Count() > 1)
    .Select(g => g.First())
    .ToList();

Чтобы вернуть все строки с дубликатами, используйте SelectMany

var allDuplicates = dt.AsEnumerable()
    .GroupBy(dr => dr.Field<string>("VMDList"))
    .Where(g => g.Count() > 1)
    .SelectMany(g => g)
    .ToList();

Ответ 2

Если требование выбирает всю строку, а не выбирает столбец, то измените linq следующим образом:

var duplicates = dt.AsEnumerable()
.Select(dr => dr.Field<string>("VMDList"))
.GroupBy(x => x)
.Where(g => g.Count() > 1)
.Select(g);

Если дубликаты будут групповой коллекцией.