环境:Visual Studio 2015,.NET Framework 4.0

本文参考MSDN : https://docs.microsoft.com/zh-cn/


DataTable

DataTable是 ADO.NET 库中的中心对象。 使用的其他对象 DataTable 包括 DataSet 和 DataView 。

在访问 DataTable 对象时,请注意,它们具有条件区分大小写。 例如,如果一个 DataTable 名为 "mydatatable",另一个名为 "mydatatable",则用于搜索其中一个表的字符串被视为区分大小写。 但是,如果 "mydatatable" 存在并且 "Mydatatable" 不是,则搜索字符串将被视为不区分大小写。 DataSet可以包含两个 DataTable 对象,这些对象具有相同的 TableName 属性值,但 Namespace 属性值不同。 有关使用对象的详细信息 DataTable ,请参阅 创建 DataTable。

如果要 DataTable 以编程方式创建,则必须先通过将 DataColumn 对象添加到 DataColumnCollection 通过属性) 访问 (来定义其架构 Columns 。 有关添加对象的详细信息 DataColumn ,请参阅 将列添加到 DataTable。

若要将行添加到 DataTable 中,必须首先使用 NewRow 方法返回新的 DataRow 对象。 NewRow方法返回一个具有架构的行 DataTable ,因为它是由表的定义的 DataColumnCollection 。 可存储的最大行数 DataTable 为16777216。 有关详细信息,请参阅 将数据添加到 DataTable。

以上来自MSDN,本文主要讲解代码创建DataTable 及Linq for DataTable


1、创建表格,通过向DataTable.Columns添加DataColumn构造列表列集合

            //创建一个DataTable实例DataTable dataTable = new DataTable();//添加名称dataTable.TableName = "Test table1";//添加数据列dataTable.Columns.Add(new DataColumn("No", Type.GetType("System.Int32")));dataTable.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));dataTable.Columns.Add(new DataColumn("Sex", Type.GetType("System.String")));dataTable.Columns.Add(new DataColumn("Age", Type.GetType("System.Int32")));dataTable.Columns.Add(new DataColumn("Address", Type.GetType("System.String")));dataTable.Columns.Add(new DataColumn("Mobile", Type.GetType("System.String")));

2、关于数据列DataColumn,常用的是一个参数或两个参数的构造函数创建他的实例,一个参数的是列名,两个参数的是列名和数据类型

        // 摘要://     使用指定的列名称将 System.Data.DataColumn 类的新实例初始化为类型字符串。//// 参数://   columnName://     一个字符串,它表示要创建的列的名称。如果设置为 null 或空字符串 (""),则当添加到列集合中时,将指定一个默认名称。public DataColumn(string columnName);//// 摘要://     使用指定列名称和数据类型初始化 System.Data.DataColumn 类的新实例。//// 参数://   columnName://     一个字符串,它表示要创建的列的名称。如果设置为 null 或空字符串 (""),则当添加到列集合中时,将指定一个默认名称。////   dataType://     支持的 System.Data.DataColumn.DataType。//// 异常://   T:System.ArgumentNullException://     未指定任何 dataType。public DataColumn(string columnName, Type dataType);

3、向表格插入数据,创建数据行(DataRow),把数据行添加到数据表格的行集合(Rows)

            DataRow dataRow = dataTable.NewRow();dataRow["No"] = 1;dataRow["Name"] = "Tom";dataRow["Sex"] = "Man";dataRow["Age"] = 25;dataRow["Address"] = "181 Huangpu Avenue, Tianhe District, Guangzhou";dataRow["Mobile"] = "13200000001";dataTable.Rows.Add(dataRow);


Linq for DataTable

1、DataTable要用Linq,需要调用AsEnumerable()把DataTable转成System.Collections.Generic.IEnumerable对象

        // 摘要://     返回一个 System.Collections.Generic.IEnumerable`1 对象,其泛型参数 T 为 System.Data.DataRow。此对象可用在//     LINQ 表达式或方法查询中。//// 参数://   source://     可枚举的源 System.Data.DataTable。//// 返回结果://     一个 System.Collections.Generic.IEnumerable`1 对象,其泛型参数 T 为 System.Data.DataRow。//// 异常://   T:System.ArgumentNullException://     源 System.Data.DataTable 为 null。public static EnumerableRowCollection<DataRow> AsEnumerable(this DataTable source);

2、如果结果要转DataTable,最好调用AsDataView().ToTable(),这样即使查询结果集为空也不会报错

        // 摘要://     创建并返回一个支持 LINQ 的 System.Data.DataView 对象,该对象表示 LINQ to DataSet 查询。//// 参数://   source://     从中创建支持 LINQ 的 System.Data.DataView 的源 LINQ to DataSet 查询。//// 类型参数://   T://     源序列中的对象的类型,通常为 System.Data.DataRow。//// 返回结果://     支持 LINQ 的 System.Data.DataView 对象。public static DataView AsDataView<T>(this EnumerableRowCollection<T> source) where T : DataRow;

3、代码实践

创建DataTable,并准备好数据

            //创建一个DataTable实例DataTable dataTable = new DataTable();//添加名称dataTable.TableName = "Test table1";//添加数据列dataTable.Columns.Add(new DataColumn("No", Type.GetType("System.Int32")));dataTable.Columns.Add(new DataColumn("Name", Type.GetType("System.String")));dataTable.Columns.Add(new DataColumn("Sex", Type.GetType("System.String")));dataTable.Columns.Add(new DataColumn("Age", Type.GetType("System.Int32")));dataTable.Columns.Add(new DataColumn("Address", Type.GetType("System.String")));dataTable.Columns.Add(new DataColumn("Mobile", Type.GetType("System.String")));//准备一些数据int age = 20;for (int i = 1; i < 11; i++){DataRow dataRow = dataTable.NewRow();dataRow["No"] = i;dataRow["Name"] = "Tom";dataRow["Sex"] = "Man";dataRow["Age"] = age + i;dataRow["Address"] = "181 Huangpu Avenue, Tianhe District, Guangzhou";dataRow["Mobile"] = "13200000001";dataTable.Rows.Add(dataRow);}

例:Where,获取No大于5的数据

DataTable data = dataTable.AsEnumerable().Where(o=>Convert.ToInt32(o["No"]) > 5).AsDataView().ToTable();

如下

C# DataTable(System.Data)相关推荐

  1. linux内存管理之 ION 内存管理器浅析Ⅰ(system heap)

    目录 1 什么是ION 2 ION中不同 type 的 heap 3 ION分配(以system heap为例) 3.1 ion_alloc() 3.2 ion_system_heap_allocat ...

  2. 大数据(Big Data)扫盲

    大数据(Big Data) 大数据,官方定义是指那些数据量特别大.数据类别特别复杂的数据集,这种数据集无法用传统的数据库进行存储,管理和处理.大数据的主要特点为 数据量大(Volume), 数据类别复 ...

  3. 视频数据:彩色数据采集(Color Data)

    在Kinect for windows上,有三个摄像头,一个红外发射摄像头,一个红外摄像头 ,一个普通摄像头,这篇无博文就是说明关于普通摄像头采集视频数据的.另外还有深度数据采集(Depth Data ...

  4. 【C语言】【unix c】获取文件的元数据(软链接,硬链接)(meta data)

    一.获取文件的元数据(软链接,硬链接)(meta data) 1.元数据也就是常说的文件的属性 举例:用ls -l察看详细信息: - rw-rw-r-- 1 tarena tarena 0 8月 9 ...

  5. R语言ggplot2可视化:使用geom_smooth函数基于lm方法为每个分组的部分数据(subset data)拟合趋势关系曲线、对指定范围的数据拟合曲线

    R语言ggplot2可视化:使用geom_smooth函数基于lm方法为每个分组的部分数据(subset data)拟合趋势关系曲线.对指定范围的数据拟合曲线 目录

  6. R语言ggplot2可视化:通过水平半小提琴图(Horizontal Half Violin Plots)和抖动数据点( jittered data)可视化雨云图(Rain Cloud plots)

    R语言ggplot2可视化:通过水平半小提琴图(Horizontal Half Violin Plots)和抖动数据点( jittered data)可视化雨云图(Rain Cloud plots) ...

  7. R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息、数值数据的描述性统计(Numerical data)、离散型数据的描述性统计(Categorical)

    R语言数据描述性统计(Descriptive statistics)实战:数据全局描述信息.数值数据的描述性统计(Numerical data).离散型数据的描述性统计(Categorical) 目录

  8. 异常数据(outlier data)处理基于分位数法(箱图法、箱型法)替换及删除方案

    异常数据(outlier data)处理基于分位数法(箱图法.箱型法)替换及删除方案 简单统计法: 这个原则有个条件:数据需要服从正态分布. 在3倍标准差原则下,异常值如超过3倍标准差,那么可以将其视 ...

  9. 被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变

    2019独角兽企业重金招聘Python工程师标准>>> 自从阿法狗战胜人类顶级棋手之后,深度学习.人工智能变得再一次火热起来.有些人认为,深度学习的再一次兴起是源于硬件的提升.数据量 ...

最新文章

  1. 机器学习:协方差矩阵
  2. AI、ML论文网站、如何阅读论文?
  3. mysql程序设计排球比赛_Jsp+Ssh+Mysql实现的排球馆预约管理系统项目源码附带视频指导运行教程...
  4. python3读取csv和xlsx文件
  5. Android Custom View ----invalidate() 、postInvalidate() and requestLayout()
  6. 什么是对象的消息_SpringBoot+RabbitMQ方式收发消息,一文带你体验
  7. Visual Studio 2012中使用GitHub
  8. java程序可分为两个基本文件_1 Java语言概述答案
  9. linux将视频导入到iphone,如何将 IPhone 的文件导入 Linux
  10. 蓝湖 for Mac(自动切图sketch插件)中文版
  11. qq邮箱登录收件服务器是什么,你好请问qq邮箱收件服务器不能为空是什么意思...
  12. excel文件分割器
  13. [小o地图-数据] - 获取全国行政区划轮廓数据(上)
  14. 脚本基础(未完待续)
  15. facebook 添加好友_如何对Facebook帖子添加不同的React(如心脏或表情符号)
  16. github忘记邮箱找回办法
  17. 为什么大家都愿意进入外企?
  18. cpp mysql_使用MYSQLCPPCONN连接MYSQL数据库与读写BLOB字段
  19. from keras.preprocessing.sequence import pad_sequences 标红
  20. 单片C语言程序设计,用C语言编程操作SPMC75系列单片 - 控制/MCU - 电子发烧友网

热门文章

  1. 用例规约的写法、常见用例规约、核心业务用例规约
  2. php 票务系统开发_客车票务系统thinkPHP框架搭建
  3. 生日攻击实现离散对数问题的求解(C++)
  4. python的dropna函数_Pandas DataFrame.dropna()用法
  5. 施工企业该怎样降本增效?
  6. STS 每次切换工作空间都得重新配置------解决办法
  7. Java8中@Contended和伪共享
  8. 自动编码器(pytorch)
  9. uni-app - 日历选择器组件(支持日期 “范围选择“ 多选 / 支持单选日期 / 自定义默认选中时间 / 弹框式 / 支持农历 )完美兼容 H5 APP 小程序,最好用的教程完整源代码插件!
  10. pytest进阶之xunit fixture