Dapper QueryMultiple을 사용할 때 generic 인수에 유형을 제공합니다.

c# dapper generics runtime

문제

나는 이상한 레이어를 만들려고하고 QueryMultiple 메서드를 사용하는 메서드를 만들고 싶습니다. QueryMultiple의 Read 메소드를 사용하여 입력 형식 목록을 런타임에 결정된 문자열 형식으로 매핑하려고합니다. Read 메서드를 사용하려고 할 때 generic 인수가 내가 만드는 형식을 받아 들일 수있는 방법을 찾을 수 없습니다.

아무도 정확하게 유형을 제공하는 방법에 나를 도울 수 있습니까?

코드는 다음과 같습니다.

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); 

일반 형식 매개 변수 에 대한 자세한 내용은 MSDN (영문)을 참조하십시오.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.