一些工具函数--object 于 DataTable 相互转换
2012-05-02 17:20
393 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using System.Collections;
namespace Tool
{
public class DataTable2Object
{
/// <summary>
/// Convert an DataRow to an object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="row"></param>
/// <returns></returns>
public static T ConvertToObject<T>(DataRow row) where T:new()
{
System.Object obj = new T();
if(row!=null)
{
DataTable dataTable = row.Table;
GetObject(dataTable.Columns,row,obj);
}
if (obj != null && obj is T)
{
return (T)obj;
}
else
{
return default(T);
}
}
private static void GetObject(DataColumnCollection cols,DataRow dr,System.Object obj)
{
Type type = obj.GetType();
PropertyInfo[] pros = type.GetProperties();
foreach(PropertyInfo pro in pros)
{
if(cols.Contains(pro.Name))
{
pro.SetValue(obj,dr[pro.Name]==DBNull.Value?null:dr[pro.Name],null);
}
}
}
/// <summary>
/// Convert a data table to an objct list
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataTable"></param>
/// <returns></returns>
public static List<T> ConvertToList<T>(DataTable dataTable) where T:new()
{
List<T> list = new List<T>();
foreach (DataRow row in dataTable.Rows)
{
T obj = ConvertToObject<T>(row);
list.Add(obj);
}
return list;
}
/// <summary>
/// Convert object collection to an data table
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static DataTable ConvertToDataTableFromList(System.Object list)
{
DataTable dt = null;
System.Type listType = list.GetType();
if(listType.IsGenericType)
{
System.Type type = listType.GetGenericArguments()[0];
dt = new DataTable(type.Name+"List");
MemberInfo[] mems = type.GetMembers(BindingFlags.Public | BindingFlags.Instance);
#region 表结构构建
foreach (MemberInfo mem in mems)
{
//switch(mem.MemberType)
//{
// case MemberTypes.Property:
// {
// dt.Columns.Add(((PropertyInfo)mem).Name,typeof(System.String));
// break;
// }
// case MemberTypes.Field:
// {
// dt.Columns.Add(((FieldInfo)mem).Name,typeof(System.String));
// break;
// }
//}
dt.Columns.Add(mem.Name,mem.ReflectedType);
}
#endregion
#region 表数据填充
IList iList = list as IList;
foreach (System.Object record in iList)
{
System.Int32 i = 0;
System.Object[] fieldValues = new System.Object[dt.Columns.Count];
foreach (DataColumn dataColumn in dt.Columns)
{
MemberInfo mem = listType.GetMember(dataColumn.ColumnName)[0];
switch (mem.MemberType)
{
case MemberTypes.Field:
{
fieldValues[i] = ((FieldInfo)mem).GetValue(record);
break;
}
case MemberTypes.Property:
{
fieldValues[i] = ((PropertyInfo)mem).GetValue(record, null);
break;
}
}
i++;
}
dt.Rows.Add(fieldValues);
}
#endregion
}
return dt;
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Reflection;
using System.Collections;
namespace Tool
{
public class DataTable2Object
{
/// <summary>
/// Convert an DataRow to an object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="row"></param>
/// <returns></returns>
public static T ConvertToObject<T>(DataRow row) where T:new()
{
System.Object obj = new T();
if(row!=null)
{
DataTable dataTable = row.Table;
GetObject(dataTable.Columns,row,obj);
}
if (obj != null && obj is T)
{
return (T)obj;
}
else
{
return default(T);
}
}
private static void GetObject(DataColumnCollection cols,DataRow dr,System.Object obj)
{
Type type = obj.GetType();
PropertyInfo[] pros = type.GetProperties();
foreach(PropertyInfo pro in pros)
{
if(cols.Contains(pro.Name))
{
pro.SetValue(obj,dr[pro.Name]==DBNull.Value?null:dr[pro.Name],null);
}
}
}
/// <summary>
/// Convert a data table to an objct list
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dataTable"></param>
/// <returns></returns>
public static List<T> ConvertToList<T>(DataTable dataTable) where T:new()
{
List<T> list = new List<T>();
foreach (DataRow row in dataTable.Rows)
{
T obj = ConvertToObject<T>(row);
list.Add(obj);
}
return list;
}
/// <summary>
/// Convert object collection to an data table
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
public static DataTable ConvertToDataTableFromList(System.Object list)
{
DataTable dt = null;
System.Type listType = list.GetType();
if(listType.IsGenericType)
{
System.Type type = listType.GetGenericArguments()[0];
dt = new DataTable(type.Name+"List");
MemberInfo[] mems = type.GetMembers(BindingFlags.Public | BindingFlags.Instance);
#region 表结构构建
foreach (MemberInfo mem in mems)
{
//switch(mem.MemberType)
//{
// case MemberTypes.Property:
// {
// dt.Columns.Add(((PropertyInfo)mem).Name,typeof(System.String));
// break;
// }
// case MemberTypes.Field:
// {
// dt.Columns.Add(((FieldInfo)mem).Name,typeof(System.String));
// break;
// }
//}
dt.Columns.Add(mem.Name,mem.ReflectedType);
}
#endregion
#region 表数据填充
IList iList = list as IList;
foreach (System.Object record in iList)
{
System.Int32 i = 0;
System.Object[] fieldValues = new System.Object[dt.Columns.Count];
foreach (DataColumn dataColumn in dt.Columns)
{
MemberInfo mem = listType.GetMember(dataColumn.ColumnName)[0];
switch (mem.MemberType)
{
case MemberTypes.Field:
{
fieldValues[i] = ((FieldInfo)mem).GetValue(record);
break;
}
case MemberTypes.Property:
{
fieldValues[i] = ((PropertyInfo)mem).GetValue(record, null);
break;
}
}
i++;
}
dt.Rows.Add(fieldValues);
}
#endregion
}
return dt;
}
}
}
相关文章推荐
- 一些工具函数--object 于 DataTable 相互转换
- 一些工具函数--通用类型转换
- 系统常用工具函数类:日期转换、DataTable,DataReader
- [原创] DataTable与Object互相转换及相关函数转换大全(DataConvert类)
- Object与Json串相互转换工具JsonlibUtil
- bean和json相互转换工具类(工具ObjectMapper)
- html的“object HTMLDivElement”与jquery“object Object”相互转换
- 字节码问题--wchar和char的区别以及wchar和char之间的相互转换字符编码转换等方法及函数介绍
- C# DataTable 和List之间相互转换的方法
- 扩展方法(1) DataTable 和List 相互转换
- DataTable List 相互转换
- Xml与DataTable相互转换方法
- DataTable与Linq相互转换方法
- matlab中数理统计的一些工具函数
- 图像到16进制相互转换的几个函数
- java时间戳与日期相互转换工具详解
- SQLServer(MSSQL)、MySQL、SQLite、Access相互迁移转换工具 DB2DB v1.0
- C#之DataTable与实体集合相互转换
- Java中一些数据类型的相互转换
- C# JsonObject Json格式与Json对象相互转换