public class Help<T> where T : new()
{
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;
if (dt.Columns.Contains(tempName))
{
if (!pi.CanWrite) continue;
object value = dr[tempName];
if (value != DBNull.Value)
pi.SetValue(t, value, null);
}
}
ts.Add(t);
}
return ts;
}
}
==================== 华丽的分割线===========================
//List转Datatable
一、List<T>/IEnumerable转换到DataTable/DataView
private
DataTable ToDataTable<T>(List<T> items)
{
var
tb =
new
DataTable(
typeof
(T).Name);
PropertyInfo[] props =
typeof
(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach
(PropertyInfo prop
in
props)
{
Type t = GetCoreType(prop.PropertyType);
tb.Columns.Add(prop.Name, t);
}
foreach
(T item
in
items)
{
var
values =
new
object
[props.Length];
for
(
int
i = 0; i < props.Length; i++)
{
values[i] = props[i].GetValue(item,
null
);
}
tb.Rows.Add(values);
}
return
tb;
}
/// <summary>
/// Determine of specified type is nullable
/// </summary>
public
static
bool
IsNullable(Type t)
{
return
!t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() ==
typeof
(Nullable<>));
}
/// <summary>
/// Return underlying type if type is Nullable otherwise return the type
/// </summary>
public
static
Type GetCoreType(Type t)
{
if
(t !=
null
&& IsNullable(t))
{
if
(!t.IsValueType)
{
return
t;
}
else
{
return
Nullable.GetUnderlyingType(t);
}
}
else
{
return
t;
}
}
//方法二
public
static
DataTable ToDataTable<T>(IEnumerable<T> collection)
{
var
props =
typeof
(T).GetProperties();
var
dt =
new
DataTable();
dt.Columns.AddRange(props.Select(p =>
new
DataColumn(p.Name, p.PropertyType)).ToArray());
if
(collection.Count() > 0)
{
for
(
int
i = 0; i < collection.Count(); i++)
{
ArrayList tempList =
new
ArrayList();
foreach
(PropertyInfo pi
in
props)
{
object
obj = pi.GetValue(collection.ElementAt(i),
null
);
tempList.Add(obj);
}
object
[] array = tempList.ToArray();
dt.LoadDataRow(array,
true
);
}
}
return
dt;
}