【发布时间】:2014-04-29 06:50:20
【问题描述】:
我看了几十个答案,threeofthem 似乎真的很接近我想要实现的目标。
我有一个包含数百个视图的数据库。我使用 dapper 来查询视图的结果。我在网格中显示结果。这是一个只读操作。视图结果已经映射到类。这是一个典型的查询:
queryResults = conn.Query(Of vw_EmployeeProductDetails)(queryString, Nothing)
现在,我对每个视图都有一个单独的查询(每个视图都有自己的函数)。我更愿意将queryString 和“ViewType”传递给单个函数以获得结果。
'pass Type as function parameter
Dim ViewType = GetType(vw_EmployeeProductDetails)
SelectView(queryString, ViewType)
'...
'in the generic query function:
queryResults = conn.Query(Of ViewType)(queryString, Nothing)
但是,这不会编译,我收到错误“未定义类型'ViewType'。”
我尝试创建特定类的实例,然后传递该类型。我在多种配置中使用了Activator.CreateInstance。我尝试使用MakeGenericType。我尝试将结果显式放入“ViewType”列表中:
Dim ViewType = GetType(List(Of )).MakeGenericType(GetType(vw_EmployeeProductDetails))
Dim list = Activator.CreateInstance(ViewType)
list = conn.Query(queryString, Nothing)
以上方法(以及更多死胡同)都不起作用。上面的代码让我回到了第一个问题(一个不能轻易在网格中显示的通用对象,即使正确的属性都在那里,而无需将其扔回数据集/数据表中)。
我正在阅读有关 generic types 的更多信息,以查看是否可以让编译器识别 Query(Of ViewType) 中的类型,但我仍然无法完全掌握如何将它们放在一起,或者该方法是否可行(例如,所有我的 ViewTypes 继承自泛型类?)。
由于同样的原因,这段代码无法编译:
Dim ViewType= GetType(List(Of )).MakeGenericType(GetType(vw_EmployeeProductDetails))
Dim list = Activator.CreateInstance(ViewType)
Dim list2() As List(Of ViewType)
创建list2 时,ViewType 未定义。我完全不知道如何定义它,如果它甚至可能,或者我是否应该放弃整个方法。
谁能提供有关这是否可能的见解?如果是这样,我该如何实现它。如果没有,在这种情况下是否有合适的替代方案?
【问题讨论】:
标签: .net vb.net casting runtime dapper