Запрос для обнаружения повторяющихся строк
Я прочитал данные из XML-файла в DataSet, используя c#, чем я хочу идентифицировать повторяющиеся (полностью одинаковые ) строки в этом наборе. Я пробовал такую группировку, и это работает!
var d= from r1 in table.AsEnumerable()
group r1 by new
{
t0 = r1[0],
t1 = r1[1],
t2 = r1[2],
t3 = r1[3],
t4 = r1[4],
t5 = r1[5],
t6 = r1[6],
t7 = r1[7],
t8 = r1[8],
}
into grp
where grp.Count() > 1
select grp;
но количество столбцов данных может отличаться, поэтому я не могу применить статическую группировку в запросе, как указано выше. Мне пришлось генерировать массив группировки динамически?
Я не хочу удалять дубликат, я просто хочу их найти!
2 ответов
var rows = table.AsEnumerable();
var unique = rows.Distinct(DataRowComparer.Default);
var duplicates = rows.Except(unique); // , DataRowComparer.Default);
попробуй такое
DataTable dt = TableName;
dt = oPerformance.RemoveDuplicateRows(dt, ColToCompareAndRemove);
и вот функция RemoveDuplicateRows
public DataTable RemoveDuplicateRows(DataTable dTable, string colName)
{
Hashtable hTable = new Hashtable();
ArrayList duplicateList = new ArrayList();
//Add list of all the unique item value to hashtable, which stores combination of key, value pair.
//And add duplicate item value in arraylist.
foreach (DataRow drow in dTable.Rows)
{
if (hTable.Contains(drow[colName]))
duplicateList.Add(drow);
else
hTable.Add(drow[colName], string.Empty);
}
//Removing a list of duplicate items from datatable.
foreach (DataRow dRow in duplicateList)
dTable.Rows.Remove(dRow);
//Datatable which contains unique records will be return as output.
return dTable;
}