• 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
    
  • 相关阅读:
    【spring】基于AspectJ的AOP
    【matlab】stanford线性回归,logistic regression 实验
    【Python】列表、字典和元组的排序
    PHP 二叉树的深度优先与广度优先遍历
    PHP 定义栈结构,实现min函数,获取栈最小元素,要求时间复杂度为O(1)
    PHP 短连接生成
    一条SQL查询访问记录表(visit_log)中某个类目(catalog_id)的访问量(visit)排前两名的记录行
    利用 p, 1p 随机数发生器知道等概率发生器
    PHP 将二叉查找树转换为双向链表,要求不能创建新节点,只能调节节点指针
    PHP 求最大递增子序列长度
  • 原文地址:https://www.cnblogs.com/zlqblog/p/4387378.html
Copyright © 2020-2023  润新知