对于一个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. Mock.js:前后端分离开发工具

    概述 Mock.js实现的功能 基于 数据模板 生成数据 基于 HTML模板 生成数据 拦截并模拟 Ajax请求 用法 浏览器: <!-- (必选)加载 Mock --> <scri ...

  2. java 时间格式化(2016.04.12 12:32:55)

    输入的时间格式如:2016.04.12 12:32:55所示: 想要获取一定格式的日期,时间的方法 String startString = "2016.04.25 12:25:44&quo ...

  3. stuts1:(Struts)Action类及其相关类

    org.apache.struts.action.Action类是Struts的心脏,也是客户请求和业务操作间的桥梁.每个Action类通常设计为代替客户完成某种操作.一旦正确的Action实例确定, ...

  4. 【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作

    在Lucene对文本进行处理的过程中,可以大致分为三大部分: 1.索引文件:提取文档内容并分析,生成索引 2.搜索内容:搜索索引内容,根据搜索关键字得出搜索结果 3.分析内容:对搜索词汇进行分析,生成 ...

  5. 开源轻量级移动端友好的JS地图库——leaflet学习教程

    Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的.开源的 JavaScript 库.代码仅有 33 KB,但它具有开发在线地图的大部分功能.Leaflet设计坚持简便.高性能和可 ...

  6. ps aux 中的状态说明

    D    不可中断     Uninterruptible sleep (usually IO)R    正在运行,或在队列中的进程S    处于休眠状态T    停止或被追踪Z    僵尸进程W  ...

  7. Leetcode 283 Move Zeroes python

    题目: Given an array nums, write a function to move all 0's to the end of it while maintaining the rel ...

  8. 为openwrt编译xd-h3c

    西电老校区,openwrt上用的认证软件. 在package下新建一目录"xd-h3c",在里面新建一个Makefile,内容如下: include $(TOPDIR)/rules ...

  9. Go语言(golang)开源项目大全

    转http://www.open-open.com/lib/view/open1396063913278.html内容目录Astronomy构建工具缓存云计算命令行选项解析器命令行工具压缩配置文件解析 ...

  10. 关于SubclassWindow()和SubclassDlgItem

    msdn上的解析 CWnd::SubclassWindowBOOL SubclassWindow( HWND hWnd ); Return Value Nonzero if the function ...