C#DataTable与实体类互相转换

使用 DataTable与实体类互相转换

/// <summary>  
/// 用DataRow转换实体类
/// </summary>  
public static T DataRowConvertToModel(DataRow dr)
{
	if (dr == null)
	{
		return default(T);
	}
	//T model = (T)Activator.CreateInstance(typeof(T));  
	T model = new T();

	for (int i = 0; i < dr.Table.Columns.Count; i++)
	{
		PropertyInfo propertyInfo =model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
		if (propertyInfo != null && dr[i] != DBNull.Value)
			propertyInfo.SetValue(model,Convert.ChangeType(dr[i], propertyInfo.PropertyType), null);
	}
	return model;
}
/// <summary>  
/// 用DataTable转换实体类
/// </summary>  
public static List<T> DataTableConvertToModel(DataTable dt)
{
	if (dt == null || dt.Rows.Count == 0)
	{
		return null;
	}
	List<T> modelList = new List<T>();
	foreach (DataRow dr in dt.Rows)
	{
		//T model = (T)Activator.CreateInstance(typeof(T));  
		T model = new T();
		for (int i = 0; i < dr.Table.Columns.Count; i++)
		{
			PropertyInfo propertyInfo = model.GetType().GetProperty(dr.Table.Columns[i].ColumnName);
			if (propertyInfo != null && dr[i] != DBNull.Value)
				propertyInfo.SetValue(model, Convert.ChangeType(dr[i], propertyInfo.PropertyType), null);
		}
		modelList.Add(model);
	}
	return modelList;
}
/// <summary>
/// 根据实体类创建表结构
/// </summary>
/// <param name="model">实体类</param>
/// <returns></returns>
private static DataTable CreateDataTable(T model)
{
	DataTable dataTable = new DataTable(typeof(T).Name);
	foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
	{
		dataTable.Columns.Add(new DataColumn(propertyInfo.Name, propertyInfo.PropertyType));
	}
	return dataTable;
}
/// <summary>
/// List转换成DataTable
/// </summary>
/// <param name="modelList">List集合</param>
/// <returns></returns>
public static DataTable ListConvertToDataTable(List<T> modelList)
{
	if (modelList == null || modelList.Count == 0)
	{
		return null;
	}
	DataTable dt = CreateDataTable(modelList[0]);

	foreach (T model in modelList)
	{
		DataRow dataRow = dt.NewRow();
		foreach (PropertyInfo propertyInfo in typeof(T).GetProperties())
		{
			dataRow[propertyInfo.Name] = propertyInfo.GetValue(model, null);
		}
		dt.Rows.Add(dataRow);
	}
	return dt;
}
posted @ 2020-09-02 13:35  怒剑利涛  阅读(924)  评论(0)    收藏  举报