我知道这个答案很晚了,但我花了一个多小时来准备这段代码,因为我首先需要这个,然后我认为寻找这个问题的解决方案的人可能会使用这个..
为了使我的答案正常工作,您的列表属性的名称需要与 DataBase 表列(字段)或 DataTable 列名称中的名称相同。
解决方案:
public List<dynamic> GetListFromDT(Type className, DataTable dataTable)
{
List<dynamic> list = new List<dynamic>();
foreach (DataRow row in dataTable.Rows)
{
object objClass = Activator.CreateInstance(className);
Type type = objClass.GetType();
foreach (DataColumn column in row.Table.Columns)
{
PropertyInfo prop = type.GetProperty(column.ColumnName);
prop.SetValue(objClass, row[column.ColumnName], null);
}
list.Add(objClass);
}
return list;
}
如何使用 ?
假设您有一个名为 dtPersons 的填充数据表
DataTable dtPersons; //populate this datatable
然后假设您有一个具有以下属性的类。
public class Persons{
public string Name {get; set;}
public int Age {get; set;}
}
现在打包并将方法放入您的模型中。调用方法如下。
List<dynamic> dynamicListReturned = GetListFromDT(typeof(Persons), dataTable);
List<Persons> listPersons = dynamicListReturned.Cast<Persons>().ToList();
就是这样,现在您从listPersons的数据表中获得了您的列表。
请记住:类属性和 DataTable/Database 中的名称应该相同