对于一个datatable中的数据进行嵌套查询判断某几列数据是否相同从而确定这条数据是否一样,并确定他重复的次数COUNT1字段。

例如: DataTable dt = new DataTable();

dt.Columns.Add("NAME", System.Type.GetType("System.String"));
        dt.Columns.Add("SEX", System.Type.GetType("System.String"));
        dt.Columns.Add("BIRTHDAY", System.Type.GetType("System.String"));
        dt.Columns.Add("BIRPLACE", System.Type.GetType("System.String"));

dt.Columns.Add("COUNT1", System.Type.GetType("System.Int32"));

假设一个dsBA数据集中包含很多信息,不乏有几行重复的数据

循环dsBA给dt加入数据

for (int i = 0; i < dsBA.Tables[0].Rows.Count; i++)
        {
            DataRow dr = dt.NewRow();
            dr["NAME"] = dsBA.Tables[0].Rows[i]["NAME"];
            dr["SEX"] = dsBA.Tables[0].Rows[i]["SEX"];
            dr["BIRTHDAY"] = dsBA.Tables[0].Rows[i]["BIRTHDAY"];
            dr["BIRPLACE"] = dsBA.Tables[0].Rows[i]["BIRPLACE"];
            dr["COUNT1"] = 1;//初始化不管
            dt.Rows.Add(dr);
        }

那么对dt的排序操作如下:(必须先对dt排序)

#region 操作dt
//首先对dt要按名称排序这样有利于内层循环做判断
dt.DefaultView.Sort = "NAME asc";
DataTable dt2 = dt.DefaultView.ToTable(); DataTable dtCopy = dt2.Clone();
//判断dt中数据人员四项是否有相同的的,如果有相同的则代表同一个人,
//如果次数大于1则保存该人员信息和总计次数,并输出结果
int count = 1;//定义count保存重复的次数,确定人员出访次数
bool flag = false;//是否结束内存循环和内层循环是否结束
for (int i = 0; i < dt2.Rows.Count; i++)
{
count = 1;
string name1 = dt2.Rows[i]["NAME"].ToString();
string sex1 = dt2.Rows[i]["SEX"].ToString();
string birthday1 = dt2.Rows[i]["BIRTHDAY"].ToString();
string birplace1 = dt2.Rows[i]["BIRPLACE"].ToString();
for (int j = i+1; j < dt2.Rows.Count; j++)
{
string name2 = dt2.Rows[j]["NAME"].ToString();
string sex2 = dt2.Rows[j]["SEX"].ToString();
string birthday2 = dt2.Rows[j]["BIRTHDAY"].ToString();
string birplace2 = dt2.Rows[j]["BIRPLACE"].ToString();
if (name1 == name2 && sex1 == sex2 && birplace1 == birplace2 && birthday1 == birthday2)
{
count++;//次数加1
flag = true;//继续循环
continue; //
}
else
{
flag = false;//表示没有相同的
break;//推出本层循环继续外围循环
}
}
if (count > 1&&flag==false)
{
DataRow dr = dtCopy.NewRow();
dr["NAME"] = dt2.Rows[i]["NAME"];
dr["SEX"] = dt2.Rows[i]["SEX"];
dr["BIRTHDAY"] = dt2.Rows[i]["BIRTHDAY"];
dr["BIRPLACE"] = dt2.Rows[i]["BIRPLACE"];
dr["COUNT1"] = count;
dtCopy.Rows.Add(dr);
}
i = i + count;//从不重复的位置开始继续进行外层循环
}
#endregion

ADO.NET DataSet、DataTable、DataRow、DataView的学习的更多相关文章

  1. DataSet & DataTable &DataRow 深入浅出

    本篇文章适合有一定的基础的人去查看 ,最好学习过一定net 编程基础在来查看此文章. 1.概念 DataSet是ADO.NET的中心概念.可以把DataSet当成内存中的数据库,DataSet是不依赖 ...

  2. DataSet - DataTable - DataRow 读取 xml 文件 + 搜索

    DataSet ds = XmlHelper.GetDataSetByXml(AppDomain.CurrentDomain.BaseDirectory + "/Config/ConfigN ...

  3. DataTable,DataSet,DataRow与DataView

    DataTable和DataSet可以看做是数据容器,比如你查询数据库后得到一些结果,可以放到这种容器里,那你可能要问:我不用这种容器,自己读到变量或数组里也一样可以存起来啊,为什么用容器?原因是,这 ...

  4. DataSet,DataTable,DataColumn,DataRow的常用操作

    DataSet 这个玩意没什么好讲的,当ado.net查询出有多张表集合的数据返回时,这个时候就会使用到DataSet. DataTable //表之间直接赋值 dt2=dt1; 两者指向同一内存空间 ...

  5. dataTable 、dataView、Dataset 区别

    dataTable .dataView.Dataset 区别的经典回答 1.DataView是DataTable的表示,DataTable表里的记录是没有顺序的,但显示可以有不同顺序(DataVIew ...

  6. 第八周学习笔记-ADO.Net中DataTable的应用

    ADO.Net中DataTable的应用  一.知识点描述 1.概述:DataTable是一个临时保存数据的网格虚拟表(表示内存中数据的一个表),是ADO.Net库中的核心对象. 2.DataTabl ...

  7. dataset datatable datacolums datarow

    DataSet 表示数据在内存中的缓存. 属性 Tables  获取包含在 DataSet 中的表的集合. ds.Tables["sjxx"] DataTable 表示内存中数据的 ...

  8. C#使用DataSet Datatable更新数据库的三种实现方法

    本文以实例形式讲述了使用DataSet Datatable更新数据库的三种实现方法,包括CommandBuilder 方法.DataAdapter 更新数据源以及使用sql语句更新.分享给大家供大家参 ...

  9. 使用DataSet Datatable 更新数据库的三种方式

    1:自动生成命令的条件 CommandBuilder 方法a)动态指定 SelectCommand 属性b)利用 CommandBuilder 对象自动生成 DataAdapter 的 DeleteC ...

  10. DataSet,DataTable排序(转载)

    DataSet,DataTable排序   关于对已经绑定的DataSet的排序的问题: DataSet ds=new DataSet();DataView dv=new DataView();dv. ...

随机推荐

  1. 把Storyboard减轻的方法

    把Storyboard减轻的方法 by 伍雪颖 UIViewController *secondStoryboard = [[UIStoryboard storyboardWithName:@&quo ...

  2. [python笔记][第二章Python序列-list]

    2016/1/27学习内容 第二章 Python序列-list list常用操作 list.append(x) list.extend(L) list.insert(index,x) list.rem ...

  3. 【数学三角恒等变幻】【HDU2552】三足鼎立

    Problem Description MCA山中人才辈出,洞悉外界战火纷纷,山中各路豪杰决定出山拯救百姓于水火,曾以题数扫全场的威士忌,曾经高数九十九的天外来客,曾以一剑铸十年的亦纷菲,歃血为盟,盘 ...

  4. tomcat-maven-plugin 插件使用

    配置 在pom.xm 加入以下xml. <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId&g ...

  5. 详解AJAX核心 —— XMLHttpRequest 对象 (上)

    我要说的内容都是非常基础的内容,高手就免看了,如果看了欢迎给点意见啊.新手或者对低层还不是很了解的人可以看看,帮助理解与记忆. XMLHttpRequest 对象是AJAX功能的核心,要开发AJAX程 ...

  6. ubuntu python PyCharm virtualenv

    1.安装virtualenv 参照:http://docs.jinkan.org/docs/flask/installation.html 2.PyCharm结合virtualenv开发应用 PyCh ...

  7. Windows下Vundle安装

    鼠标手老是发作,没办法.想学习vim尽量减少编码时使用鼠标的频率.安装好gVim开始安装Vundle插件,总结下安装过程和各种遇到的坑: github上VundleVim倒是有说明 Windows S ...

  8. linux常用命令--diff

    diff是Unix系统的一个很重要的工具程序. 它用来比较两个文本文件的差异,是代码版本管理的基石之一.你在命令行下,输入: $ diff <变动前的文件> <变动后的文件> ...

  9. zz[C++]合理的设计和使用消息队列

    http://www.cnblogs.com/egmkang/archive/2012/11/17/2763295.html 生产者消费者问题,是永远的经典. 单纯让多个线程去竞争,占有资源然后处理, ...

  10. css3弹性盒模型(Flexbox)

    Flexbox是布局模块,而不是一个简单的属性,它包含父元素和子元素的属性. Flexbox布局的主体思想是似的元素可以改变大小以适应可用空间,当可用空间变大,Flex元素将伸展大小以填充可用空间,当 ...