对于一个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. JVM工作原理和特点(一些二逼的逼神面试官会问的问题)

    作为一种阅读的方式了解下jvm的工作原理 ps:(一些二逼的逼神面试官会问的问题) JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完毕,通过以下4步来完毕JVM环境. ...

  2. 大话NoSql

    之前看过一本名叫<<大数据挑战的书>>.里面主要讲了NOSQL的内容,感觉讲得确实不错,今天来又一次温习一下,我们大话NOSQL.说道NOSQL.我们肯定联想到的内容就是Big ...

  3. java排列

    排列:它可以被看作是多个相同类型的数据的组合,这些数据的统一管理. 1.声明. 创建 一维:type[]  var  比如:int[] a或 int a[]: 数组名= new  数组元素的类型[数组 ...

  4. python 笔记4-- 函数式编程

    高阶函数 把函数作为参数传入,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式. 在python中 函数也是一种变量 def add(x, y, f): return f(x) + f( ...

  5. stagefright框架(二)- 和OpenMAX的運作

    Stagefright的編解碼功能是利用OpenMAX框架,而且用的還是OpenCORE之OMX的實作,我們來看一下Stagefright和OMX是如何運作的. (1) OMX_Init OMXCli ...

  6. ionic安装

    npm set registry http://registry.cnpmjs.org/ 设置淘宝镜像

  7. ArcGIS添加鹰眼

    axMapControl1是主地图 axMapControl2是鹰眼地图 private void axMapControl1_OnExtentUpdated(object sender, IMapC ...

  8. Reverse Words in a String (JAVA)

    Given an input string, reverse the string word by word. For example,Given s = "the sky is blue& ...

  9. iOS 事件处理机制与图像渲染过程

    Peter在开发公众号功能时触发了一个bug,导致群发错误.对此我们深表歉意,并果断开除了Peter.以下交回给正文时间: iOS 事件处理机制与图像渲染过程 iOS RunLoop都干了什么 iOS ...

  10. 2015.4.8-C#入门基础(二)

    初来乍道,下面分享一下,自己做的小程序 主要用到 数组,类型转换,枚举,循环: 主要体现的是: 输入姓名,就可以查看其性格 using System;using System.Collections. ...