Dapper QueryMultipleを使用するときに汎用引数に型を提供する

c# dapper generics runtime

質問

私は、ダッパー上にレイヤーを作成しようとしているし、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を参照してください。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ