zoukankan      html  css  js  c++  java
  • ADO.NET DataSet、DataTable、DataRow、DataView的学习

    对于一个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
    
  • 相关阅读:
    第40次全国计算机等级考试监考
    [再寄小读者之数学篇](2014-07-27 打印错误吧)
    日积月累的名典[2014-10-7]
    2014年全球“高被引科学家”数学类名单
    年轻尼姑的19句话
    PostgreSQL的 initdb 源代码分析之十六
    PostgreSQL的 initdb 源代码分析之十五
    PostgreSQL的 initdb 源代码分析之十四
    PostgreSQL的 initdb 源代码分析之十三
    PostgreSQL的 initdb 源代码分析之十二
  • 原文地址:https://www.cnblogs.com/zlqblog/p/4387378.html
Copyright © 2011-2022 走看看