仅作学习笔记记录使用,大牛绕行
public T DataRowToModel<T>(DataRow row) where T : class, new()
{
T model = new T();
if (row != null)
{
foreach (DataColumn item in row.Table.Columns)
{
if (row[item.ColumnName] != null && row[item.ColumnName].ToString() != "")
{
Type type = typeof(T);
var list = type.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.IgnoreCase);
string value = row[item.ColumnName].ToString();
foreach (var property in list)
{
if (!property.PropertyType.IsGenericType)
{
//非泛型
property.SetValue(model, string.IsNullOrEmpty(value) ?
null : Convert.ChangeType(value, property.PropertyType), null);
}
else
{
//泛型Nullable<>
Type genericTypeDefinition = property.PropertyType.GetGenericTypeDefinition();
if (genericTypeDefinition == typeof(Nullable<>))
{
property.SetValue(model, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, Nullable.GetUnderlyingType(property.PropertyType)), null);
}
}
break;
}
}
}
return model;
}
else
{
return null;
}
}