using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Runtime.Serialization.Formatters.Binary;
using System.Reflection;
namespace BatchService.Framework.Utility
{
public class EntityConverter
{
///
/// DataSet转换为实体类
///
/// 实体类
/// DataSet
/// 待转换数据表索引
/// 实体类
public static T DataSetToEntity(DataSet p_DataSet, int p_TableIndex)
{
if (p_DataSet == null || p_DataSet.Tables.Count < 0)
return default(T);
if (p_TableIndex > p_DataSet.Tables.Count - 1)
return default(T);
if (p_TableIndex < 0)
p_TableIndex = 0;
if (p_DataSet.Tables[p_TableIndex].Rows.Count <= 0)
return default(T);
DataRow p_Data = p_DataSet.Tables[p_TableIndex].Rows[0];
// 返回值初始化
T _t = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] propertys = _t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
try
{
if (p_DataSet.Tables[p_TableIndex].Columns.IndexOf(pi.Name.ToUpper()) != -1 && p_Data[pi.Name.ToUpper()] != DBNull.Value)
{
pi.SetValue(_t, p_Data[pi.Name.ToUpper()], null);
}
else
{
pi.SetValue(_t, null, null);
}
}
catch (Exception ex)
{
LogHelper.Error(pi.Name + "," + p_Data[pi.Name.ToUpper()] + "," + ex.ToString());
}
}
return _t;
}
///
/// DataSet转换为实体列表
///
/// 实体类
/// DataSet
/// 待转换数据表索引
/// 实体类列表
public static IList DataSetToEntityList(DataSet p_DataSet, int p_TableIndex)
{
if (p_DataSet == null || p_DataSet.Tables.Count < 0)
return default(IList);
if (p_TableIndex > p_DataSet.Tables.Count - 1)
return default(IList);
if (p_TableIndex < 0)
p_TableIndex = 0;
if (p_DataSet.Tables[p_TableIndex].Rows.Count <= 0)
return default(IList);
DataTable p_Data = p_DataSet.Tables[p_TableIndex];
// 返回值初始化
IList result = new List();
for (int j = 0; j < p_Data.Rows.Count; j++)
{
T _t = (T)Activator.CreateInstance(typeof(T));
PropertyInfo[] propertys = _t.GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
if (p_Data.Columns.IndexOf(pi.Name.ToUpper()) != -1 && p_Data.Rows[j][pi.Name.ToUpper()] != DBNull.Value)
{
pi.SetValue(_t, p_Data.Rows[j][pi.Name.ToUpper()], null);
}
else
{
pi.SetValue(_t, null, null);
}
}
result.Add(_t);
}
return result;
}
//dataset转实体类
public static IList FillModel(DataSet ds)
{
List l = new List();
T model = default(T);
if (ds.Tables[0].Columns[0].ColumnName == "rowId")
{
ds.Tables[0].Columns.Remove("rowId");
}
foreach (DataRow dr in ds.Tables[0].Rows)
{
model = Activator.CreateInstance();
foreach (DataColumn dc in dr.Table.Columns)
{
PropertyInfo pi = model.GetType().GetProperty(dc.ColumnName);
if (dr[dc.ColumnName] != DBNull.Value)
pi.SetValue(model, dr[dc.ColumnName], null);
else
pi.SetValue(model, null, null);
}
l.Add(model);
}
return l;
}
}
}