Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var rowsToDelete = dataTable.AsEnumerable()
- .GroupBy(r => new{A=r["COLUMN_A"],B=r["COLUMN_B"]})
- .Where(g => g.Count() > 1)
- .SelectMany(g=>g)
- .ToList();
- foreach (var row in rowsToDelete)
- {
- dataTable.Rows.Remove(row);
- }
- private static void RemoveDuplicates(DataTable tbl,
- DataColumn[] keyColumns)
- {
- int rowNdx = 0;
- while(rowNdx < tbl.Rows.Count-1)
- {
- DataRow[] dups = FindDups(tbl, rowNdx, keyColumns);
- if(dups.Length>0)
- {
- foreach(DataRow dup in dups)
- {
- tbl.Rows.Remove(dup);
- }
- }
- else
- {
- rowNdx++;
- }
- }
- }
- private static DataRow[] FindDups(DataTable tbl,
- int sourceNdx,
- DataColumn[] keyColumns)
- {
- ArrayList retVal = new ArrayList();
- DataRow sourceRow = tbl.Rows[sourceNdx];
- for(int i=sourceNdx + 1; i<tbl.Rows.Count; i++)
- {
- DataRow targetRow = tbl.Rows[i];
- if(IsDup(sourceRow, targetRow, keyColumns))
- {
- retVal.Add(targetRow);
- }
- }
- return (DataRow[]) retVal.ToArray(typeof(DataRow));
- }
- private static bool IsDup(DataRow sourceRow,
- DataRow targetRow,
- DataColumn[] keyColumns)
- {
- bool retVal = true;
- foreach(DataColumn column in keyColumns)
- {
- retVal = retVal && sourceRow[column].Equals(targetRow[column]);
- if(!retVal) break;
- }
- return retVal;
- }
- // create an example datatable with duplicate rows
- DataTable tbl = new DataTable();
- tbl.Columns.Add("ColumnA");
- tbl.Columns.Add("ColumnB");
- tbl.Columns.Add("ColumnC");
- for(int i = 0; i<10; i++)
- {
- DataRow nr = tbl.NewRow();
- nr["ColumnA"] = "A" + i.ToString();
- nr["ColumnB"] = "B" + i.ToString();
- nr["ColumnC"] = "C" + i.ToString();
- tbl.Rows.Add(nr);
- // duplicate
- nr = tbl.NewRow();
- nr["ColumnA"] = "A" + i.ToString();
- nr["ColumnB"] = "B" + i.ToString();
- nr["ColumnC"] = "C" + i.ToString();
- tbl.Rows.Add(nr);
- }
- PrintRows(tbl); // show table with duplicates
- //Create an array of DataColumns to compare
- //If these columns all match we consider the
- //rows duplicate.
- DataColumn[] keyColumns =
- new DataColumn[]{tbl.Columns["ColumnA"],
- tbl.Columns["ColumnA"]};
- //remove the duplicates
- RemoveDuplicates(tbl, keyColumns);
Add Comment
Please, Sign In to add comment