筛选DataTable行重复

  1  /// <summary>
  2         /// 验证Datatable是否已经实例
  3         /// </summary>
  4         /// <param name="dt"></param>
  5         /// <returns></returns>
  6         private bool Checkdt(DataTable dt)
  7         {
  8             if (dt == null)
  9             {
 10                 MessageBox.Show("参数Datatable未实例化");
 11                 return false;
 12             }
 13             else
 14                 return true;
 15         }
 16         /// <summary>
 17         /// 验证传入筛选列是否属于欲筛选Datatable
 18         /// </summary>
 19         /// <param name="dt"></param>
 20         /// <param name="fieldname"></param>
 21         /// <returns></returns>
 22         private bool Checkfieldname(DataTable dt,string[] fieldname)
 23         {
 24             int flag=0;
 25             for (int i = 0; i < fieldname.Length; i++)
 26             {
 27                 string  strfieldname = fieldname[i];
 28                 for (int j= 0; j < dt.Columns.Count; j++)
 29                 {
 30                     string colname = dt.Columns[j].ColumnName;
 31                     if (strfieldname == colname)
 32                         flag++;
 33                 }
 34             }
 35             if (flag == fieldname.Length)
 36             {
 37                 return true;
 38             }
 39             else
 40             {
 41                 MessageBox.Show("存在不属于参数Datatable的列");
 42                 return false;
 43             }
 44         }
 45         /// <summary>
 46         /// fieldname的传入顺序会影响结果
 47         /// 如果dt有主键可以传入主键用来筛选
 48         /// 出dt中不同记录
 49         /// </summary>
 50         /// <param name="dt"></param>
 51         /// <param name="fieldname"></param>
 52         /// <returns></returns>
 53         private DataTable dtfiter(DataTable dt,string[] fieldname)
 54         {
 55             if (Checkdt(dt) && Checkfieldname(dt,fieldname))
 56             {
 57                 for (int k = 0; k < fieldname.Length; k++)
 58                 {
 59                     for (int i = 0; i < dt.Rows.Count; i++)
 60                     {
 61                         string dti = dt.Rows[i][fieldname[k]].ToString();
 62                         for (int j = 0; j < dt.Rows.Count; j++)
 63                         {
 64                             string dtj = dt.Rows[j][fieldname[k]].ToString();
 65                             if (dti == dtj)
 66                                 if (i != j && dti != string.Empty)
 67                                 {
 68                                     dt.Rows.Remove(dt.Rows[j]);
 69                                 }
 70                         }
 71                     }
 72                 }
 73             }
 74             return dt;
 75         }
 76         private DataTable DifDatatable(DataTable dt)
 77         {
 78             List<int> samerow=new List<int>();
 79             int flag = 0;
 80             List<DataRow> listdr = new List<DataRow>();
 81             for (int i = 0; i < dt.Rows.Count; i++)
 82             {
 83                 DataRow dr = dt.Rows[i];
 84                 for (int j = i+1; j < dt.Rows.Count; j++)
 85                 {
 86                     DataRow secdr = dt.Rows[j];
 87                     for (int k = 0; k < dt.Columns.Count; k++)
 88                     {
 89                         if (dr[k].ToString() == secdr[k].ToString())
 90                             flag++;
 91                         if (flag == dt.Columns.Count)
 92                             samerow.Add(j);
 93                     }
 94                     flag = 0;
 95                 }
 96             }
 97             IEnumerable<int> sameindex = samerow.Distinct();
 98             foreach (var item in sameindex)
 99             {
100                 listdr.Add(dt.Rows[item]);//记录dt中重复行
101             }
102             foreach (var item in listdr)
103             {
104                 dt.Rows.Remove(item);//移除dt中重复行
105             }
106             return dt;
107         }
原文地址:https://www.cnblogs.com/yuerdongni/p/2888289.html