Guest User

Untitled

a guest
Jan 16th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. var rowsToDelete = dataTable.AsEnumerable()
  2. .GroupBy(r => new{A=r["COLUMN_A"],B=r["COLUMN_B"]})
  3. .Where(g => g.Count() > 1)
  4. .SelectMany(g=>g)
  5. .ToList();
  6.  
  7. foreach (var row in rowsToDelete)
  8. {
  9. dataTable.Rows.Remove(row);
  10. }
  11.  
  12. private static void RemoveDuplicates(DataTable tbl,
  13. DataColumn[] keyColumns)
  14. {
  15. int rowNdx = 0;
  16. while(rowNdx < tbl.Rows.Count-1)
  17. {
  18. DataRow[] dups = FindDups(tbl, rowNdx, keyColumns);
  19. if(dups.Length>0)
  20. {
  21. foreach(DataRow dup in dups)
  22. {
  23. tbl.Rows.Remove(dup);
  24. }
  25. }
  26. else
  27. {
  28. rowNdx++;
  29. }
  30. }
  31. }
  32.  
  33. private static DataRow[] FindDups(DataTable tbl,
  34. int sourceNdx,
  35. DataColumn[] keyColumns)
  36. {
  37. ArrayList retVal = new ArrayList();
  38.  
  39. DataRow sourceRow = tbl.Rows[sourceNdx];
  40. for(int i=sourceNdx + 1; i<tbl.Rows.Count; i++)
  41. {
  42. DataRow targetRow = tbl.Rows[i];
  43. if(IsDup(sourceRow, targetRow, keyColumns))
  44. {
  45. retVal.Add(targetRow);
  46. }
  47. }
  48. return (DataRow[]) retVal.ToArray(typeof(DataRow));
  49. }
  50.  
  51. private static bool IsDup(DataRow sourceRow,
  52. DataRow targetRow,
  53. DataColumn[] keyColumns)
  54. {
  55. bool retVal = true;
  56. foreach(DataColumn column in keyColumns)
  57. {
  58. retVal = retVal && sourceRow[column].Equals(targetRow[column]);
  59. if(!retVal) break;
  60. }
  61. return retVal;
  62. }
  63.  
  64. // create an example datatable with duplicate rows
  65. DataTable tbl = new DataTable();
  66.  
  67. tbl.Columns.Add("ColumnA");
  68. tbl.Columns.Add("ColumnB");
  69. tbl.Columns.Add("ColumnC");
  70. for(int i = 0; i<10; i++)
  71. {
  72. DataRow nr = tbl.NewRow();
  73. nr["ColumnA"] = "A" + i.ToString();
  74. nr["ColumnB"] = "B" + i.ToString();
  75. nr["ColumnC"] = "C" + i.ToString();
  76. tbl.Rows.Add(nr);
  77. // duplicate
  78. nr = tbl.NewRow();
  79. nr["ColumnA"] = "A" + i.ToString();
  80. nr["ColumnB"] = "B" + i.ToString();
  81. nr["ColumnC"] = "C" + i.ToString();
  82. tbl.Rows.Add(nr);
  83. }
  84.  
  85. PrintRows(tbl); // show table with duplicates
  86.  
  87. //Create an array of DataColumns to compare
  88. //If these columns all match we consider the
  89. //rows duplicate.
  90. DataColumn[] keyColumns =
  91. new DataColumn[]{tbl.Columns["ColumnA"],
  92. tbl.Columns["ColumnA"]};
  93.  
  94. //remove the duplicates
  95. RemoveDuplicates(tbl, keyColumns);
Add Comment
Please, Sign In to add comment