我有一个查询,我在其中执行复杂的计算,包括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#中,我可以做类似于this answer and its comments中所做的事情。但是,在带有Option Strict On
的VB.Net中,我无法做到这一点。
为了更好地描述我正在尝试做的事情,这就是可能的样子,如果它不是Option Strict On disallows late binding
上u.SumA
的错误u.SumB
{1}}语句中的{1}}。请注意,我将New With
设置在班级的顶部:
Option Infer On
这可能与VB中缺少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
类型有关。因此,非通用dynamic
覆盖会返回Query
而不是其C#对应的IEnumerable(Of Object)
。
我的问题是:有没有办法做我想用Dapper和VB.Net做的事情?
答案 0 :(得分:0)
我刚写了一个简单的(私有/内部)数据类,它具有映射所需的所有属性。我知道这很难过,但那就是vb.net ......