前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >去除DataTable中重复字段

去除DataTable中重复字段

作者头像
跟着阿笨一起玩NET
发布2018-09-18 15:32:31
发布2018-09-18 15:32:31
1.9K00
代码可运行
举报
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
复制
#region  去除datatable中重复字段
        /// <summary>
        /// </summary>
        /// <param name="SourceTable"></param>
        /// <param name="FieldNames"></param>
        /// <returns></returns>
        protected DataTable SelectDistinct(DataTable SourceTable, params string[] FieldNames)
        {
            object[] lastValues;
            DataTable newTable;
            DataRow[] orderedRows;
            //if (FieldNames == null || FieldNames.Length == 0)
            //    throw new ArgumentNullException("FieldNames");
            //如果FieldNames为空,则默认查询所有的列。
            if (FieldNames == null || FieldNames.Length == 0)
            {
                FieldNames = new string[SourceTable.Columns.Count];
                for (int i = 0; i < SourceTable.Columns.Count; i++)
                {
                    FieldNames[i] = SourceTable.Columns[i].ColumnName;
                }
            }
           
            lastValues = new object[FieldNames.Length];
            newTable = new DataTable();
            foreach (string fieldName in FieldNames)
                newTable.Columns.Add(fieldName, SourceTable.Columns[fieldName].DataType);
            orderedRows = SourceTable.Select("", string.Join(",", FieldNames));
            foreach (DataRow row in orderedRows)
            {
                if (!fieldValuesAreEqual(lastValues, row, FieldNames))
                {
                    newTable.Rows.Add(createRowClone(row, newTable.NewRow(), FieldNames));
                    setLastValues(lastValues, row, FieldNames);
                }
            }
            return newTable;
        }
        private bool fieldValuesAreEqual(object[] lastValues, DataRow currentRow, string[] fieldNames)
        {
            bool areEqual = true;
            for (int i = 0; i < fieldNames.Length; i++)
            {
                if (lastValues[i] == null || !lastValues[i].Equals(currentRow[fieldNames[i]]))
                {
                    areEqual = false;
                    break;
                }
            }
            return areEqual;
        }
        private DataRow createRowClone(DataRow sourceRow, DataRow newRow, string[] fieldNames)
        {
            foreach (string field in fieldNames)
                newRow[field] = sourceRow[field];
            return newRow;
        }
        private void setLastValues(object[] lastValues, DataRow sourceRow, string[] fieldNames)
        {
            for (int i = 0; i < fieldNames.Length; i++)
                lastValues[i] = sourceRow[fieldNames[i]];
        }
        #endregion

调用如下:

               DataTable tbl = new DataTable();                 tbl.Columns.Add("Id", typeof(System.Int32));                 tbl.Columns.Add("City", typeof(System.String));                 tbl.Columns.Add("Province", typeof(System.String));

                tbl.Rows.Add(1, "武汉", "湖北");                 tbl.Rows.Add(2, "应城", "湖北");                 tbl.Rows.Add(3, "武汉", "湖北");

               // DataTable dt2 = SelectDistinct(tbl, null);                 DataTable dt2 = SelectDistinct(tbl,  "City", "Province" );                 //DataTable dt2 = SelectDistinct(tbl, new string[] { "City", "Province" });                 this.dataGridView1.DataSource = dt2;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2012-10-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档