VB.NET에서 런타임시 클래스 유형 지정

.net casting dapper runtime vb.net

문제

나는 대답 수십 살펴 보았다, 그리고 세 가지 그들에게 내가 달성하기 위해 노력하고있어 정말 가까운 것 같다.

수백 개의 뷰가있는 데이터베이스가 있습니다. 나는 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)

위의 어느 것도 (막 다른 골목과 함께) 작동하지 않았습니다. 위의 코드는 정사각형 (올바른 속성이 모두 있지만 데이터 세트 / 데이터 테이블에 다시 반환하지 않고도 쉽게 눈금으로 표시 할 수없는 일반 객체)으로 돌아 왔습니다.

나는 Query(Of ViewType) 에서 Type을 인식하도록 컴파일러를 얻을 수 있는지를 알기 위해 제네릭 형식 에 대해 더 많이 읽었지만 여전히 모든 것을 함께 넣는 방법이나 그 접근 방식이 작동하는지 (예 : 모든 ViewTypes 제네릭 클래스에서 상속?).

이 코드는 같은 이유로 컴파일되지 않습니다.

Dim ViewType= GetType(List(Of )).MakeGenericType(GetType(vw_EmployeeProductDetails))
Dim list = Activator.CreateInstance(ViewType)
Dim list2() As List(Of ViewType)

list2 작성할 때 ViewType 이 정의되지 않습니다. 나는 그것을 정의하는 방법, 심지어 가능하다면, 또는 전체 접근법을 폐기해야하는지에 대해 절대적으로 분실되어있다.

가능하다면 누구나 통찰력을 제공 할 수 있습니까? 그렇다면 어떻게 구현할 수 있습니까? 그렇지 않은 경우,이 상황에서 적절한 대안이 있습니까?

수락 된 답변

일반 쿼리 함수는 제네릭 형식 매개 변수를 받아 들여야합니다.

 Public Function MyQueryFunction(Of T)(queryString As String) As List(Of T)
    return conn.Query(Of T)(queryString, Nothing)
 End Function

그리고 당신은 이것을 다음과 같이 부를 것입니다 :

  Dim myresults as List(Of vw_EmployeeProductDetails) = MyQueryFunction(Of vw_EmployeeProductDetails)(queryString)


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