前几天开发个c#小项目,win7 64/win10 64 都通过了,在服务器2012上面一直提示:
将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”
百度了下,找了个函数,记录一下。
/// <summary>
/// 利用反射将DataTable转换为List<T>对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
public static List <T> DataTableToList <T> (DataTable dt) where T: class, new()
{
Type t = typeof(T);
PropertyInfo[] propertys = t.GetProperties();
List <T> list = new List <T> ();
string typeName = string.Empty;
foreach(DataRow dr in dt.Rows)
{
T o = new T();
foreach(PropertyInfo pi in propertys)
{
typeName = pi.Name;
if(dt.Columns.Contains(typeName))
{
if(!pi.CanWrite)
{
continue;
}
object value = dr[typeName];
if(value == DBNull.Value)
{
continue;
}
if(pi.PropertyType == typeof(string))
{
pi.SetValue(o, value.ToString(), null);
}
else if(pi.PropertyType == typeof(int) || pi.PropertyType == typeof(int ? ))
{
pi.SetValue(o, int.Parse(value.ToString()), null);
}
else if(pi.PropertyType == typeof(DateTime ? ) || pi.PropertyType == typeof(DateTime))
{
pi.SetValue(o, DateTime.Parse(value.ToString()), null);
}
else if(pi.PropertyType == typeof(float))
{
pi.SetValue(o, float.Parse(value.ToString()), null);
}
else if(pi.PropertyType == typeof(double))
{
pi.SetValue(o, double.Parse(value.ToString()), null);
}
else
{
pi.SetValue(o, value, null);
}
}
}
list.Add(o);
}
return list;
}
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://www.ihulang.com/index/info/6.html