去除DataTable中的重复行

来源:互联网 发布:淘宝买片该搜什么 编辑:程序博客网 时间:2024/04/28 20:01

                #region   过滤DataTable中的指定字段重复的行

                ///   <summary>
                ///   过滤DataTable中的指定字段重复的行
                ///   </summary>
                ///   <param   name= "dt "> </param>
                ///   <param   name= "FieldName "> </param>
                ///   <returns> </returns>
                public   DataTable   SelectDistinctByField(DataTable   dt,   string   FieldName)
                {
                        DataTable   returnDt   =   new   DataTable();
                        returnDt   =   dt.Copy();//将原DataTable复制一个新的
                        DataRow[]   drs   =   returnDt.Select( " ",   FieldName);//将DataTable按指定的字段排序
                        object   LastValue   =   null;  
                        for(int   i   =   0;   i   <   drs.Length;   i++)
                        {
                                if((LastValue   ==   null)   ||   (!(ColumnEqual(LastValue,   drs[i][FieldName]))))
                                {
                                        LastValue   =   drs[i][FieldName];  
                                        continue;          
                                }
         
                                drs[i].Delete();
                        }
 
                        return   returnDt;
                }

                private   bool   ColumnEqual(object   A,   object   B)
                {  
                        //   Compares   two   values   to   see   if   they   are   equal.   Also   compares   DBNULL.Value.
                        //   Note:   If   your   DataTable   contains   object   fields,   then   you   must   extend   this
                        //   function   to   handle   them   in   a   meaningful   way   if   you   intend   to   group   on   them.
     
                        if   (   A   ==   DBNull.Value   &&   B   ==   DBNull.Value   )   //     both   are   DBNull.Value
                                return   true;  
                        if   (   A   ==   DBNull.Value   ||   B   ==   DBNull.Value   )   //     only   one   is   DBNull.Value
                                return   false;  
                        return   (   A.Equals(B)   );     //   value   type   standard   comparison
                }

                #endregion

原创粉丝点击