我有一个大约有100左右的表的数据库。我想要做的是以下几点:动态填充没有具体数据类型的对象的通用列表
- 获取数据库中的表列表。
- 循环遍历列表中的每个表,并将表中的所有记录选择到数据表中。
- 对于每个数据表,动态生成POCO类的通用列表
- 读取每个数据行并填充对象,然后将其添加到列表中。
我正在通过项目1和2罚款。但对于项目3和4,我遇到了麻烦。下面是我的代码有:
Type type = Type.GetType(tableName);
var list = Utility.BindList<type>(dataTable);
我得到的例外是:“‘类型’是一个变量,但使用像一个类型”
思考它,这是有道理的。当然,如果我输入实际类而不是类型,它工作正常:
Type type = Type.GetType(tableName);
var list = Utility.BindList<Person>(dataTable);
但我不想要硬编码任何实际的类。顺便说一句,这里是的BindList方法,我上面调用的签名(这部分工作正常):
public static List<T> BindList<T>(DataTable dt)
{
// Turn Data Table into Generic List
return list
}
有没有人对如何做到这一点有什么建议?
谢谢!
更新:解决方案如下,由Tyress提供:
Type type = Assembly.Load("[NAMESPACE PATH]").GetTypes().First(t => t.Name == tableName);
var method = typeof(Utility).GetMethod("BindList").MakeGenericMethod(type);
var bindResult = method.Invoke(null, new[] { datatable });
[泛型在C#,使用一个变量作为参数的类型](的可能的复制https://stackoverflow.com/questions/2107845 /泛型中的c-using-type-of-a-variable-as-parameter) –
实际上这是一个不同的问题。我想要做的是将自定义类的具体数据类型传入通用函数。 –
不,它不是。您没有具体的数据类型。你只有一个类型,它是运行时已知的(你自己写在你的问题标题中) –