VB.Net에서 Dapper의 동적 / 익명 객체 쿼리 및 사용

.net dapper dynamic vb.net

문제

NULL 계산과 0으로 나누기위한 특별한 경우를 포함하여 복잡한 계산을 수행하는 쿼리가 있습니다. 이것은 문제의 컨텍스트로만 제공되는 단순화 된 예입니다.

SELECT
    CASE
        WHEN SUM(f.AmountA) > 0 AND SUM(f.AmountB) > 0 THEN --Perform calculations...
        WHEN SUM(f.AmountB) < 0 THEN --Perform calculations...
        WHEN SUM(f.AmountB) = 0 THEN --Perform calculations...
    END AS Result
FROM Foo f
JOIN Bar b ON b.BarID = f.BarID

유지 보수성과 가독성을 향상시키기 위해 .Net 코드로 수행 할 계산을 남겨두고 싶습니다. 이 쿼리는 다음 예제와 비슷합니다.

SELECT SUM(f.AmountA) AS SumA, SUM(b.AmountB) AS SumB
FROM Foo f
JOIN Bar b ON b.BarID = f.BarID

그런 다음 특정 POCO에 정의되지 않은 필드 (Dapper 사용)를 쿼리해야합니다. C #에서는 이 답변과 주석 에서 수행 된 것과 비슷한 작업을 수행 할 수있었습니다. 그러나 Option Strict On 을 사용하는 VB.Net에서는이 작업을 수행 할 수 없습니다.

내가 뭘 하려는지 더 잘 설명하기 위해, 오류가 아니었다면 보이는 것처럼 보일 수 있습니다. Option Strict On disallows late bindingNew With 문에서 u.SumAu.SumBOption Strict On disallows late bindingOption Strict On disallows late binding . 클래스의 맨 위에 Option Infer On 을 설정합니다.

Using connection As New SqlClient.SqlConnection(myConnectionString)

    Dim result = connection.Query(myQuery).Select(Function(u) New With {.SumA = u.SumA, .SumB = u.SumB}).FirstOrDefault()

    If result.SumA > 0 AndAlso result.SumB > 0 Then
        'Perform calculations...
    End If
    'Other cases...

End Using

이것은 아마도 VB에서 dynamic 유형의 부족과 관련이 있습니다. 따라서 제네릭이 아닌 Query 오버라이드는 C # 대신 IEnumerable<dynamic> 대신 IEnumerable(Of Object) 반환합니다.

내 질문은 : Dapper와 VB.Net으로하고 싶은 일을 할 수있는 방법이 있습니까?

인기 답변

방금 작성해야하는 모든 속성이있는 간단한 (개인 / 내부) 데이터 클래스를 작성했습니다. 나는 그것이 슬픈 것을 안다. 그러나 thats vb.net ...



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