namespace Comm
{
public static class DataConvert
{
/// <summary>
/// 把DataRow对象转成实体类。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dr"></param>
/// <returns></returns>
static public T ToEntity<T>(DataRow dr) where T : new()
{
if (dr == null)
return default(T);
//T t = Activator.CreateInstance<T>();
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();
DataColumnCollection Columns = dr.Table.Columns;
foreach (PropertyInfo property in propertys)
{
if (!property.CanWrite)
continue;
string columnName = property.Name;
if (Columns.Contains(columnName))
{
object value = dr[columnName];
if (value is DBNull)
continue;
try
{
//property.SetValue(t, Convert.ChangeType(value, property.PropertyType), null);
property.SetValue(t, value, null);
}
catch
{
continue;
}
}
}
return t;
}
/// <summary>
/// 把DataTable对象转成实体类的列表。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
static public List<T> ToEntityList<T>(DataTable dt) where T : new()
{
List<T> list = new List<T>();
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
list.Add(ToEntity<T>(dr));
}
}
return list;
}
/// <summary>
/// 把IDataReader对象转成实体类。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dr">需要参数的方法dr.Read()返回值为true。</param>
/// <returns></returns>
static private T DataReaderToEntity<T>(IDataReader dr) where T : new()
{
T t = new T();
PropertyInfo[] propertys = t.GetType().GetProperties();
List<string> fieldNameList = new List<string>();
for (int i = 0; i < dr.FieldCount; i++)
{
fieldNameList.Add(dr.GetName(i));
}
foreach (PropertyInfo property in propertys)
{
if (!property.CanWrite)
continue;
string fieldName = property.Name;
if (fieldNameList.Contains(fieldName))
{
object value = dr[fieldName];
if (value is DBNull)
continue;
try
{
property.SetValue(t, value, null);
}
catch
{
continue;
}
}
}
return t;
}
/// <summary>
/// 把IDataReader对象转成实体类。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dr"></param>
/// <returns></returns>
static public T ToEntity<T>(IDataReader dr) where T : new()
{
if (dr != null && dr.Read())
{
return DataReaderToEntity<T>(dr);
}
return default(T);
}
/// <summary>
/// 把IDataReader对象转成实体类的列表。
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dr"></param>
/// <returns></returns>
static public List<T> ToEntityList<T>(IDataReader dr) where T : new()
{
List<T> list = new List<T>();
if (dr != null)
{
while (dr.Read())
{
list.Add(DataReaderToEntity<T>(dr));
}
}
return list;
}
}
}