public class ModelConvert<T> where T : new()
{
public static List<T> ConvertToModel(DataTable dt)
{
// 定义集合
List<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;
}
public static DataTable ConvertToDataTable(List<T> list)
{
DataTable result = new DataTable();
if (list.Count > 0)
{
PropertyInfo[] propertys = list[0].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
result.Columns.Add(pi.Name, pi.PropertyType);
}
for (int i = 0; i < list.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(list[i], null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
result.LoadDataRow(array, true);
}
}
return result;
}
//public static object[] ConvertToArray<U>(List<T> list)
//{
// object[] array = new object[list.Count];
// for (int i = 0; i < list.Count; i++)
// {
// array[i] = list[i];
// }
// return array;
//}
/// <summary>
/// List集合转换成相应的数组
/// </summary>
/// <param name="list">集合</param>
/// <returns>数组对象</returns>
public static T[] ConvertToArray(List<T> list)
{
T[] t = new T[list.Count];
for (int i = 0; i < list.Count; i++)
{
t[i] = list[i];
}
return t;
}
}