• C# DataTable使用方法详解


    太久没写C#,这段时间项目没那么忙了,利用这段时间温故知新下吧,总结下datatable的使用方法,我主要参考的文章有:

    https://blog.csdn.net/qq_36059321/article/details/89947542

                //创建表
                //创建一个没有表名的表
                DataTable dt = new DataTable();
                //创建一个有表名的表
                DataTable table = new DataTable("NewTable");
    
                //创建列(下面2种都行)
                //创建空列,没有指定列名(默认就是column1)和列的类型(默认就是string)
                table.Columns.Add(new DataColumn());
                table.Columns.Add();
                //创建带列名和类型名的列
                table.Columns.Add("列1",typeof(int));
    
                //新增空行
                table.Rows.Add();
                //新增有值的行
                table.Rows.Add("列1", "列2", 2);//Add里面参数的数据顺序要和dt中的列的顺序对应 
                //通过复制dt2表的某一行来创建
                //dt.Rows.Add(table.Rows[i].ItemArray);
    
                //赋值和取值
                //新建行的赋值,这里只是给行赋值了,该行并没有添加到: table
                DataRow dr = table.NewRow();
                dr[0] = "张三";// 通过索引赋值
                dr["column2"] = "李四";//通过字段名赋值
    
                //将某行加入到表
                table.Rows.Add(dr.ItemArray);
    
                //对datatable进行赋值(修改)
                table.Rows[1][0] = "第二行第一列";//通过索引赋值
                table.Rows[1]["column2"] = "第二行第二列";//通过字段名称赋值
    
                //对datatable进行取值
                //string name = dt.Rows[1][0].ToString();
                //string time = dt.Rows[1]["column2"].ToString();
    
                //筛选数据
                //选择column1列值为空的行的集合
                DataRow[] drs = table.Select("column1 is not null");
                //将DataRow转成datatable
                table = drs.CopyToDataTable();
                //选择column0列值为"李四"的行的集合
                DataRow[] drs1 = dt.Select("column0 = '李四'");
                //筛选column0列值中有"张"的行的集合(模糊查询)
                DataRow[] drs2 = dt.Select("column0 like '张%'");//如果的多条件筛选,可以加 and 或 or
               //筛选column0列值中有"张"的行的集合并按column1降序排序
                DataRow[] drs3 = dt.Select("column0 like '张%'", "column1 DESC");
    
                //行的删除
                //使用DataTable.Rows.Remove(DataRow)方法
                dt.Rows.Remove(dt.Rows[0]);
                //使用DataTable.Rows.RemoveAt(index)方法
                dt.Rows.RemoveAt(0);
                //使用DataRow.Delete()方法
                dt.Rows[0].Delete();
                dt.AcceptChanges();
                //-----区别和注意点-----
                //Remove()和RemoveAt()方法是直接删除
                //Delete()方法只是将该行标记为deleted,但是还存在,还可DataTable.RejectChanges()回滚,使该行取消删除。
                //用Rows.Count来获取行数时,还是删除之前的行数,需要使用DataTable.AcceptChanges()方法来提交修改。
                //如果要删除DataTable中的多行,应该采用倒序循环DataTable.Rows,而且不能用foreach进行循环删除,因为正序删除时索引会发生变化,程式发生异常,很难预料后果。
                for (int i = dt.Rows.Count - 1; i >= 0; i--)
                {
                    dt.Rows.RemoveAt(i);
                }
                table.Clear();  //清除表所有的数据
    
                //复制表,同时复制了表结构和表中的数据
                DataTable dtNew = new DataTable();
                dtNew = dt.Copy();
                //复制表
                //DataTable dtNew = dt.Copy(); //复制dt表数据结构
                //dtNew.Clear() //清空数据
                //for (int i = 0; i < dt.Rows.Count; i++)
                //{
                //    if (条件语句)
                //    {
                //        dtNew.Rows.Add(dt.Rows[i].ItemArray); //添加数据行
                //    }
                //}
                ////克隆表,只是复制了表结构,不包括数据
                //DataTable dtNew = new DataTable();
                //dtNew = dt.Clone();
                ////如果只需要某个表中的某一行
                //DataTable dtNew = new DataTable();
                //dtNew = dt.Copy();
                //dtNew.Rows.Clear();//清空表数据
                //dtNew.ImportRow(dt.Rows[0]);//这是加入的是第一行
                //表排序,排序后再转成 datatable
                table.Rows.Add("第二行第一列", "列3", 2);
                table.Rows.Add("第二行第一列", "列4", 2);
                table.Rows.Add("第二行第一列", "列1", 2);
                table.Rows.Add("第 二行第一列", "列1", 2);
                table.Rows.Add("第 二行第一列", "列1", 2);
                table.DefaultView.Sort = "column1 DESC,column2";
                table = table.DefaultView.ToTable();
                //如上的 ToTable 有2个重载,介绍下
                table = table.DefaultView.ToTable(true, "column1", "column2");  //true是对返回的数据过滤去重,后面所有的参数都是返回字段名,这里是:返回"column1", "column2"字段并且去重
                table = table.DefaultView.ToTable("新表",true, "column1", "column2");//这个是在上面的基础上,对新表取一个名字
                //字段的计算,avg,count,sum,min,max
                table.Compute("avg(字段名)", "字段名>100");
                //合并表
                table.Merge(dt);
    
                //查询出表的某一列
                var djh1 = table.AsEnumerable().Select(r => r["column1"]).ToList();
                //将查询出来的某一列加载到下拉框里面
                cboFromLine.DataSource = null;
                cboFromLine.DataSource = djh1;
    
                //datatable的遍历 
                //1、遍历表里面的每一个数据
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    for (int j = 0; j < table.Columns.Count; j++)
                    {
                        table.Rows[i][j].ToString();
                    }
                }
                //2、遍历表里面的每一个数据,使用foreach对每一行处理
                foreach (DataRow dr2 in table.Rows)
                {
                    for (int j = 0; j < table.Columns.Count; j++)
                    {
                        dr2[j].ToString();
                    }
                }
    
                //对DataTable做LINQ查询
                var results = from myRow in table.AsEnumerable()
                              where myRow.Field<int>("列1") == 1
                              select myRow;
    View Code
  • 相关阅读:
    CV baseline之VGG
    CV baseline之Alexnet
    Colab踩得坑
    CV baseline之ResNet
    轻量模型之Distilling the Knowledge in a Neural Network
    轻量模型之Xception
    用Rapidminer做文本挖掘的应用:情感分析
    R语言缺失值的处理:线性回归模型插补
    R语言如何解决线性混合模型中畸形拟合(Singular fit)的问题
    数据类岗位需求的数据面
  • 原文地址:https://www.cnblogs.com/ziqiumeng/p/16155259.html
Copyright © 2020-2023  润新知