datatable和list相互转换

author author     2022-12-08     434

关键词:


由于C#3.0出现了扩展方法  我们可以通过这样一个特性来简化我们的开发.

DataTable 转换为List<T> 的我们可以通过扩展DataTable来简化


public

static

class
DataTableExtensions



///

<summary>


///
DataTable 转换为List 集合

///

</summary>


///

<typeparam name="TResult">
类型
</typeparam>


///

<param name="dt">
DataTable
</param>


///

<returns></returns>


public

static
List
<
TResult
>
ToList
<
TResult
>
(
this
DataTable dt)
where
TResult :
class
,
new
()


//
创建一个属性的列表

List
<
PropertyInfo
>
prlist
=

new
List
<
PropertyInfo
>
();

//
获取TResult的类型实例 反射的入口

Type t
=

typeof
(TResult);

//
获得TResult 的所有的Public 属性 并找出TResult属性和DataTable的列名称相同的属性(PropertyInfo) 并加入到属性列表

Array.ForEach
<
PropertyInfo
>
(t.GetProperties(), p
=>

if
(dt.Columns.IndexOf(p.Name)
!=

-
1
) prlist.Add(p); );

//
创建返回的集合

List
<
TResult
>
oblist
=

new
List
<
TResult
>
();


foreach
(DataRow row
in
dt.Rows)


//
创建TResult的实例

TResult ob
=

new
TResult();

//
找到对应的数据 并赋值

prlist.ForEach(p
=>

if
(row[p.Name]
!=
DBNull.Value) p.SetValue(ob, row[p.Name],
null
); );

//
放入到返回的集合中.

oblist.Add(ob);


return
oblist;



​​​​

相反 的也需要List<T> 转换为DataTable 我们可以通过扩展IEnumberable<T> 来实现

​​​​
///

<summary>


///
转换为一个DataTable

///

</summary>


///

<typeparam name="TResult"></typeparam>


///

<param name="value"></param>


///

<returns></returns>


public

static
DataTable ToDataTable
<
TResult
>
(
this
IEnumerable
<
TResult
>
value)
where
TResult :
class



//
创建属性的集合

List
<
PropertyInfo
>
pList
=

new
List
<
PropertyInfo
>
();

//
获得反射的入口

Type type
=

typeof
(TResult);
DataTable dt
=

new
DataTable();

//
把所有的public属性加入到集合 并添加DataTable的列

Array.ForEach
<
PropertyInfo
>
(type.GetProperties(), p
=>
pList.Add(p);dt.Columns.Add(p.Name, p.PropertyType); );

foreach
(var item
in
value)


//
创建一个DataRow实例

DataRow row
=
dt.NewRow();

//
给row 赋值

pList.ForEach(p
=>
row[p.Name]
=
p.GetValue(item,
null
));

//
加入到DataTable

dt.Rows.Add(row);


return
dt;


 

可以通过上面的代码看出  都是主要通过反射 来实现的.  反射的效率似有点慢.   但是可以接受

当然你也可以通过表达式树 动态的构造Lambda表达式来提高效率

list,泛型和datatable的相互转换

publicstaticDataTableToDataTableTow(IListlist){DataTableresult=newDataTable();if(list.Count>0){PropertyInfo[]propertys=list[0].GetType().GetProperties();foreach(PropertyInfopiinpropertys){result.Co 查看详情

datatable和list的转换

...用传统的数据绑定造成了不便。下面介绍datatable和list的相互转换 1.datatable转换为listpublicList<T>GetList<T>(DataTabletable){Li 查看详情

datatable和list相互转化

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Web;usingSystem.Data;usingSystem.Reflection;///<summary>///DtList的摘要说明///</summary>publicclassDtList{///<summary 查看详情

xml与datatable相互转换方法

1、Xml与DataTable相互转换方法:http://www.cnblogs.com/lilin/archive/2010/04/18/1714927.html  查看详情

xml和实体类之间相互转换(序列化和反序列化)

我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727 查看详情

xml和实体类之间相互转换(序列化和反序列化)

我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727 查看详情

json与datatable相互转换

首先我们看看 Newtonsoft.Json.JsonConvert是怎么完成的:DataTabletable=newDataTable();table.Columns.Add("id");table.Columns.Add("name");table.Columns.Add("url");table.Rows.Add("1","zhengdjin","http://blog.csdn. 查看详情

fastjson中list和jsonarray的相互转换(代码片段)

1.fastjson中List和JSONArray的相互转换(1)List转换为JSONArrayList<T>list=newArrayList<T>();JSONArrayarray=JSONArray.parseArray(JSON.toJSONString(list));(2)JSONArray转换为ListJSONArrayarray 查看详情

list数组和集合相互转换

1、List的toArray()方法用于将集合转换成数组,但实际上改方法是在Collection中定义的,所以所有的集合都具备这个功能,   其有两个方法:Object【】toArray() 和 T<T>[] toArray(T[]a)第二个方法是比较常用... 查看详情

c#datatable转list和list转datatable

1、///将List<>转换为DataTablepublicstaticDataTableListToDataTable<T>(IEnumerable<T>collection)varprops=typeof(T).GetProperties();vardt=newDataTable();dt.Columns.AddRange(props.Sel 查看详情

如何相互转换逗号分隔的字符串和list

直接上代码:  publicstaticvoidmain(String[]args){//字符串转listStringstrs="a,b,c";List<String>result=Arrays.asList(strs.split(","));System.out.println(result);//list转字符串分隔List<String>list=newArrayLi 查看详情

list和json的相互转换

项目中向数据库中存一个Sting字符串,这个字符串是用其他字符串拼接成的,这样从设计的角度看是不好的,这时可以用list把字符串存进去,然后转成json字符串,再存到数据库,若要取出来用的时候,就可以取出来后再转成list&... 查看详情

java中逗号分隔的字符串和list相互转换

1、将逗号分隔的字符串转换为ListStringstr="a,b,c";  List<String>result=Arrays.asList(str.split(","));2、将List转换为逗号分隔的字符串(1) 利用Guava的JoinerList<String>list=newArrayList<String>();&nbs 查看详情

如何相互转换逗号分隔的字符串和list

将逗号分隔的字符串转换为List方法1:利用JDK的Arrays类[java] viewplain copyString str = "a,b,c";  List<String> result = Arrays.asList(str.split(","));  方法2:利用Guava的Splitter[java 查看详情

c#中list〈string〉和string[]数组之间的相互转换

 1,从System.String[]转到List<System.String>System.String[]str={"str","string","abc"};List<System.String>listS=newList<System.String>(str); 2,从List<System.String>转到System 查看详情

asp.net中datatable和list的优劣处

...用list<model>l来保存数据,一般用sqldatareader读取数据转换成实体后存入list编写是好写更多代码,如直接用datable保存数据代码更简单,但操作list比data灵活。不知在性能上市list<model>好还是datable的好,希望能详细指出list和... 查看详情

将datatable转换为list,将list转换为datatable的实现类

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Linq;usingSystem.Reflection;usingSystem.Text;usingSystem.Threading.Tasks;namespaceXmh.DBUnit{///< 查看详情

list转换datatable

///<summary>    ///将泛类型集合List类转换成DataTable    ///</summary>    ///<paramname="list">泛类型集合</param>    ///<returns></returns>    publicSystem.Data.DataTab 查看详情