关键词:
由于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 查看详情