C#中将DataTable类型转化为泛型集合
2017-12-09 14:35
246 查看
DataTable是什么?
DataTable 是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO dot net库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。
注意!!!
当访问DataTable对象时,请注意它们是按条件区分大小写的。例如,如果一个DataTable被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。一个DataSet可以包含数个DataTable对象,它们具有相同的TableName属性值和不同的Namespace属性值。有关使用DataTable对象的更多信息。
DataTable的作用是什么?
在机房重构的时候我们都会将数据库的数据读取出来,经常使用的是就是DataTable数据类型,将数据库中表的信息读取出来,存在临时数据表中,即DataTable表,然后将在其他层中需要数据传参的就直接将方法定义为DataTable类型的(除非有特殊要求)。而另一种存储数据的方式就泛型集合,将DataTable转换成泛型,然后通过泛型再去传递数据。
DataTable的数据改动需要根据数据库表中的信息操作,例如,如果我想将数据库某表的某个新字段读取出来,那么用DataTable需要重新查看数据库,然后间接就将数据库中的信息暴露了,除非是同一个人操作,不过那样不灵活了。
泛型是什么?
泛型是具有占位符(类型参数)的类、结构、接口和方
法,这些占位
符是类、结构、接口和方法存储或者使用的一个或多个类型的占位符。
泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型或其方法的参数类型出现。泛型的方法还可以将参数类型用作返回值类型或者某个形参的类型。
泛型集合其实就是一个个的实体类集合,我们在没有接触这个概念前,数据库访问返回的类型有实体、DataTable、Boolean。下面是画了几张示意图:
使用泛型的好处?
如果不用泛型集合,你要是查询有多少个用户的时候(添加删除用户),单个实体和Boolean肯定是不行的,DataTable倒是可以,但是它因为高耦合(一个用户信息变化,就得修改DataTable),使系统运行的性能会不好.
如何DataTable类型转化为泛型集合?
public List<T>ConvertToList<T>(DataTable dt) where T : new()
{
//初始化,获得类型,string类型变量
List<T> ts = newList<T>();
//获得此类型的模型
Type type = typeof(T);
String tempName = "";
foreach (DataRow dr in dt.Rows)
{
T t = new T();
//获得此模型的公共属性
PropertyInfo[] propertys =t.GetType().GetProperties();
//foreach(类型 要用的变量名称 in之前声明的变量名称)
foreach (PropertyInfo pi inpropertys)
{
tempName = pi.Name;
//检查DataTable是否包含此列
if(dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite)continue;
object value =dr[tempName];
if (value !=DBNull.Value)
pi.SetValue(t,value, null);
}
}
ts.Add(t);
}
return ts;
}
但是没理解他们到底有什么不同,及时不用泛型,我也可以将数据源存到DataTable,然后方法返回值也定义为DataTable型,请高手指点!
DataTable 是一个临时保存数据的网格虚拟表(表示内存中数据的一个表。)。DataTable是ADO dot net库中的核心对象。它可以被应用在 VB 和 ASP 上。它无须代码就可以简单的绑定数据库。它具有微软风格的用户界面。
注意!!!
当访问DataTable对象时,请注意它们是按条件区分大小写的。例如,如果一个DataTable被命名为“mydatatable”,另一个被命名为“Mydatatable”,则用于搜索其中一个表的字符串被认为是区分大小写的。但是,如果“mydatatable”存在而“Mydatatable”不存在,则认为该搜索字符串不区分大小写。一个DataSet可以包含数个DataTable对象,它们具有相同的TableName属性值和不同的Namespace属性值。有关使用DataTable对象的更多信息。
DataTable的作用是什么?
在机房重构的时候我们都会将数据库的数据读取出来,经常使用的是就是DataTable数据类型,将数据库中表的信息读取出来,存在临时数据表中,即DataTable表,然后将在其他层中需要数据传参的就直接将方法定义为DataTable类型的(除非有特殊要求)。而另一种存储数据的方式就泛型集合,将DataTable转换成泛型,然后通过泛型再去传递数据。
DataTable的数据改动需要根据数据库表中的信息操作,例如,如果我想将数据库某表的某个新字段读取出来,那么用DataTable需要重新查看数据库,然后间接就将数据库中的信息暴露了,除非是同一个人操作,不过那样不灵活了。
泛型是什么?
泛型是具有占位符(类型参数)的类、结构、接口和方
法,这些占位
符是类、结构、接口和方法存储或者使用的一个或多个类型的占位符。
泛型集合类可以将类型参数用作它所存储的对象的类型的占位符;类型参数作为其字段的类型或其方法的参数类型出现。泛型的方法还可以将参数类型用作返回值类型或者某个形参的类型。
泛型集合其实就是一个个的实体类集合,我们在没有接触这个概念前,数据库访问返回的类型有实体、DataTable、Boolean。下面是画了几张示意图:
使用泛型的好处?
如果不用泛型集合,你要是查询有多少个用户的时候(添加删除用户),单个实体和Boolean肯定是不行的,DataTable倒是可以,但是它因为高耦合(一个用户信息变化,就得修改DataTable),使系统运行的性能会不好.
如何DataTable类型转化为泛型集合?
public List<T>ConvertToList<T>(DataTable dt) where T : new()
{
//初始化,获得类型,string类型变量
List<T> ts = newList<T>();
//获得此类型的模型
Type type = typeof(T);
String tempName = "";
foreach (DataRow dr in dt.Rows)
{
T t = new T();
//获得此模型的公共属性
PropertyInfo[] propertys =t.GetType().GetProperties();
//foreach(类型 要用的变量名称 in之前声明的变量名称)
foreach (PropertyInfo pi inpropertys)
{
tempName = pi.Name;
//检查DataTable是否包含此列
if(dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if (!pi.CanWrite)continue;
object value =dr[tempName];
if (value !=DBNull.Value)
pi.SetValue(t,value, null);
}
}
ts.Add(t);
}
return ts;
}
但是没理解他们到底有什么不同,及时不用泛型,我也可以将数据源存到DataTable,然后方法返回值也定义为DataTable型,请高手指点!
相关文章推荐
- 机房重构----C#中将DataTable类型转化为泛型集合
- C# 将list<>泛型集合 转化为 DataTable
- C#读取数据库返回泛型集合 把DataSet类型转换为List<T>泛型集合
- C#笔记(一):类型,泛型,集合
- 将泛型集合类(List<T>)转换成DataTable,返回的DataTable所有列的数据类型为string型,且列顺序与字符串提供的字段顺序一致
- C#中将Object数组转换为String(或者其他类型)的数组(集合)
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- C#中将DataTable转化成List<T>的方法解析
- C#中把任意类型的泛型集合转换成SQLXML数据格式的实例
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- [c#基础]泛型集合的自定义类型排序
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- 《从LRS项目重构来看“数据类型”——(第一话)DataTable转换泛型集合出现的类型冲突》
- C#中利用LINQ to XML与反射把任意类型的泛型集合转换成XML格式字符串的方法
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- C# WebService中将集合数据转化为字符串(json,xml )的方式
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- C#中DataTable与泛型集合互转(支持泛型集合中对象包含枚举)
- c# datatable 数据类型 转 泛型
- 泛型集合、datatable常用数据类型转换Json帮助类