环境: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. Python学习笔记之五:类定义
  2. OpenCV实现基于傅里叶变换(FFT)的旋转文本校正(文字方向检测)
  3. 谭浩强课后题之----输出10个数中最大的
  4. 第24天学习Java的笔记-接口Interface
  5. sqoop mysql hadoop_使用sqoop将mysql数据导入到hadoop
  6. Oracle 抢人了!近 4000 万年薪只为一个 AI 专家
  7. 微型计算机原理及应用程序题,微型计算机原理及应用试题及答案
  8. libusb libusbk
  9. 页码太靠上怎么办_醉酒后难受怎么办?酸奶、解酒药都不靠谱,最实用的还是3个方法...
  10. 实现校园网花样上网方法
  11. c语言 愚人节题目,愚人节整人题目大全,耍的就是你!
  12. activator类的使用
  13. linux内核全局变量重定位,动态链接库中全局变量的重定位问题
  14. js 获取图片经纬度及写经纬度
  15. Moba类游戏中如何处理网络延迟与卡顿
  16. YourBatman表白了,在Java 27岁生日这天
  17. 微信开通状态检测工具(免验证码版)运行原理
  18. C# 接入企业微信群聊--机器人【markdown】
  19. 哲学笔记:之:天道性命
  20. 我的网名为什么是ma6174????

热门文章

  1. [速记] 网络安全复习(二)网络安全技术基础
  2. smote算法_海量样本无从下手?这五种抽样算法分分钟搞定
  3. shell 做加法运算_Shell数学计算(算术运算,加减乘除运算)
  4. UR机器人:位姿表示以及相关移动
  5. JAVA 两个变量值的交换
  6. 【Python3】xlwt/xlrd模块读取和新建excel并生成直方图
  7. Oracle连接配置
  8. 案例 | 华为对Zabbix的3个探索:水平扩展、数据实时消费及网络体验监控
  9. 爱奇艺Q1营收83亿:日均会员数1.29亿 运营利润六个季度连增
  10. 男人主张:我的“降”妻秘籍