C# DataTable(System.Data)

环境: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();

 如下

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑小晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值