在不知道列名和列数的情况下,可以使用 DataTable
的 Columns
属性获取所有的列信息,然后使用反射获取属性,并为每一行创建一个新的对象,将其添加到 List
中。
以下是一个示例代码:
public class MyClass
{
// 定义与 DataTable 的列对应的属性
public string Column1 { get; set; }
public int Column2 { get; set; }
// ...
}
public List ConvertDataTableToList(DataTable dataTable)
{
List result = new List();
// 获取 DataTable 的列信息
DataColumnCollection columns = dataTable.Columns;
foreach (DataRow row in dataTable.Rows)
{
// 创建新的 MyClass 对象
MyClass myObject = new MyClass();
// 使用反射设置属性值
foreach (DataColumn column in columns)
{
PropertyInfo property = typeof(MyClass).GetProperty(column.ColumnName);
if (property != null && row[column] != DBNull.Value)
{
property.SetValue(myObject, Convert.ChangeType(row[column], property.PropertyType));
}
}
// 将对象添加到结果列表
result.Add(myObject);
}
return result;
}
使用示例:
// 假设 DataTable 名为 myDataTable
DataTable myDataTable = new DataTable();
// 添加列
myDataTable.Columns.Add("Column1", typeof(string));
myDataTable.Columns.Add("Column2", typeof(int));
// ...
// 添加数据行
myDataTable.Rows.Add("Value1", 1);
myDataTable.Rows.Add("Value2", 2);
// ...
// 转换为 List
List myList = ConvertDataTableToList(myDataTable);
请注意,这个示例假设 MyClass
类的属性与 DataTable
的列名称匹配。如果列名称和属性名称不匹配,你需要在代码中进行相应的更改。