Выберите всю повторяющуюся строку из 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);
Если дубликаты будут групповой коллекцией.