动态填充没有具体数据类型的通用对象列表

数码奥兹多媒体

我有一个大约有 100 个左右表的数据库。我正在尝试做的是以下内容:

  1. 获取数据库中的表列表。
  2. 循环遍历列表中的每个表,将表中的所有记录选择到一个数据表中。
  3. 对于每个数据表,动态生成一个 POCO 类的通用列表
  4. 读取每个数据行并填充对象,然后将其添加到列表中。

我正在顺利通过第 1 项和第 2 项。但是对于第 3 项和第 4 项,我遇到了麻烦。这是我的代码:

Type type = Type.GetType(tableName);
var list = Utility.BindList<type>(dataTable);

我得到的例外是:“'type' 是一个变量,但像类型一样使用。”

仔细想想,也是有道理的。当然,如果我输入实际的类而不是类型它工作正常:

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 });
轮胎
  1. 对于每个数据表,动态生成一个 POCO 类的通用列表

但我不想硬编码任何实际的类。

我觉得这两个说法是矛盾的?您需要 POCO 课程做什么?dynamic/ExpandoObject可用于您的通用函数(而不是type),但我真的不明白为什么Dictionary如果您不需要 POCO 类就不能使用

——

根据我的理解编辑:

var method = typeof(Utility).GetMethod("BindList").MakeGenericMethod(type);
var bindResult = method.Invoke(null, new[] { dataTable });

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章