您的位置:首页 > 移动开发 > Objective-C

一些工具函数--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;
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: