///
<summary>
/// 将泛类型集合List类转换成DataTable
/// </summary>
/// <param name="list"> 泛类型集合 </param>
/// <returns></returns>
public static DataTable ListToDataTable < T > (List < T > entitys)
{
// 检查实体集合不能为空
if (entitys == null || entitys.Count < 1 )
{
throw new Exception( " 需转换的集合为空 " );
}
// 取出第一个实体的所有Propertie
Type entityType = entitys[ 0 ].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties();
// 生成DataTable的structure
// 生产代码中,应将生成的DataTable结构Cache起来,此处略
DataTable dt = new DataTable();
for ( int i = 0 ; i < entityProperties.Length; i ++ )
{
// dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
dt.Columns.Add(entityProperties[i].Name);
}
// 将所有entity添加到DataTable中
foreach ( object entity in entitys)
{
// 检查所有的的实体都为同一类型
if (entity.GetType() != entityType)
{
throw new Exception( " 要转换的集合元素类型不一致 " );
}
object [] entityValues = new object [entityProperties.Length];
for ( int i = 0 ; i < entityProperties.Length; i ++ )
{
entityValues[i] = entityProperties[i].GetValue(entity, null );
}
dt.Rows.Add(entityValues);
}
return dt;
/// 将泛类型集合List类转换成DataTable
/// </summary>
/// <param name="list"> 泛类型集合 </param>
/// <returns></returns>
public static DataTable ListToDataTable < T > (List < T > entitys)
{
// 检查实体集合不能为空
if (entitys == null || entitys.Count < 1 )
{
throw new Exception( " 需转换的集合为空 " );
}
// 取出第一个实体的所有Propertie
Type entityType = entitys[ 0 ].GetType();
PropertyInfo[] entityProperties = entityType.GetProperties();
// 生成DataTable的structure
// 生产代码中,应将生成的DataTable结构Cache起来,此处略
DataTable dt = new DataTable();
for ( int i = 0 ; i < entityProperties.Length; i ++ )
{
// dt.Columns.Add(entityProperties[i].Name, entityProperties[i].PropertyType);
dt.Columns.Add(entityProperties[i].Name);
}
// 将所有entity添加到DataTable中
foreach ( object entity in entitys)
{
// 检查所有的的实体都为同一类型
if (entity.GetType() != entityType)
{
throw new Exception( " 要转换的集合元素类型不一致 " );
}
object [] entityValues = new object [entityProperties.Length];
for ( int i = 0 ; i < entityProperties.Length; i ++ )
{
entityValues[i] = entityProperties[i].GetValue(entity, null );
}
dt.Rows.Add(entityValues);
}
return dt;
}
//table装换list
public
static
IList<T> ConvertToModel(DataTable dt)
{
// 定义集合
IList<T> ts =
new
List<T>();
// 获得此模型的类型
Type type =
typeof
(T);
string
tempName =
""
;
foreach
(DataRow dr
in
dt.Rows)
{
T t =
new
T();
// 获得此模型的公共属性
PropertyInfo[] propertys = t.GetType().GetProperties();
foreach
(PropertyInfo pi
in
propertys)
{
tempName = pi.Name;
// 检查DataTable是否包含此列
if
(dt.Columns.Contains(tempName))
{
// 判断此属性是否有Setter
if
(!pi.CanWrite)
continue
;
object
value = dr[tempName];
if
(value != DBNull.Value)
pi.SetValue(t, value,
null
);
}
}
ts.Add(t);
}
return
ts;
}