我有一个数据表,其中包含不同数据类型的列(主要是int64和string)。 我试图将此数据表转换为对象列表。 我正在使用这些方法,
public static List<T> ConvertDataTable<T>(DataTable dt)
{
List<T> data = new List<T>();
foreach (DataRow row in dt.Rows)
{
T item = GetItem<T>(row);
data.Add(item);
}
return data;
}
以下GetItem()(pro.SetValue()
更精确)方法在尝试转换Object of type 'System.String' cannot be converted to type 'System.Decimal'
datacolumn
值时会抛出异常(string
。)到类型Decimal
private static T GetItem<T>(DataRow dr)
{
Type temp = typeof(T);
T obj = Activator.CreateInstance<T>();
foreach (DataColumn column in dr.Table.Columns)
{
foreach (PropertyInfo pro in temp.GetProperties())
{
if (pro.Name == column.ColumnName)
pro.SetValue(obj, dr[column.ColumnName], null);
else
continue;
}
}
return obj;
}
这是MyClass
这只不过是
public class AgriSales
{
public Int64 Id { get; set; }
public string Type { get; set; }
public Decimal Cost { get; set; }
}
有人能指导我正确的方法来克服我所面临的障碍吗?
答案 0 :(得分:1)
使用Convert.ChangeType()
可以帮到你。但是,您可能需要为更复杂的类型实施相同的安全措施。
pro.SetValue(obj, Convert.ChangeType(dr[column.ColumnName], pro.PropertyType), null);