c# - 使用 Dapper QueryMultiple 时在泛型参数中提供类型

标签 c# generics runtime dapper

我正在尝试在 dapper 上创建一个层,并想创建一个使用 QueryMultiple 方法的方法。我想使用 QueryMultiple 的 Read 方法以字符串格式(在运行时确定)映射传入的类型列表。尝试使用 Read 方法时,我找不到让泛型参数接受我正在创建的类型的方法。

任何人都可以帮助我如何正确提供类型吗?

代码如下:

using (SqlConnection conn = GetNewConnection())
{
    conn.Open();
    var multi = conn.QueryMultiple(sql, param);
    foreach (string typeName in ListOfTypes)  //Iterate a List of types in string format.
    {
        Type elementType=  Type.GetType(typeName);
        var res= multi.Read<elementType>();  //Error: The type or namespace name 'combinedType' could not be found (are you missing a using directive or an assembly reference?)
        //Add result to a dictionary
    }
}

最佳答案

QueryMultiple.Read<T>()当前正在使用的方法采用在编译时必须知道的泛型类型参数。换句话说,elementType不能用作 <T> 中的通用类型参数参数:

Type elementType = Type.GetType(typeName);
var res = multi.Read<elementType>(); // /Error: The type or namespace... etc.

如果直到运行时才知道类型,请使用 QueryMultiple.Read(Type type)方法:

Type elementType = Type.GetType(typeName);
var res = multi.Read(elementType); 

有关 Generic Type Parameters 的更多信息,请参阅 MSDN .

关于c# - 使用 Dapper QueryMultiple 时在泛型参数中提供类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213924/

相关文章:

c# - 如何关闭用于在 WCF 服务中生成流式处理结果的数据库连接?

scala - 如何仅使泛型可接受彼此不相关的少数数据类型

haskell - GHC 垃圾收集器/运行时如何知道它可以创建数组 `inplace'

分配给泛型类型的 Java 原始类型值运行时 getClss() 方法错误

c# - 高效地写入日志文件

c# - 将加密 key 和 IV 存储/转换为字符串

c# - DataSet 是否具有 Contain 或 In 功能?

java - 创建 Class<?> 对象,其中 <?> 定义为 ArrayList<String> 中的字符串 - Java

java - 如何解决 IntelliJ 突出显示的未经检查的转换问题?

c++ - 基指针如何知道派生类实例中基成员的内存位置?