【发布时间】:2014-02-02 18:43:51
【问题描述】:
我有一个查询,我在其中执行复杂的计算,包括 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 中,我无法执行任何操作。
为了更好地描述我正在尝试做的事情,如果不是 u.SumA 和 u.SumB 上的错误 Option Strict On disallows late binding New With 声明。请注意,我在班级顶部设置了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 覆盖返回 IEnumerable(Of Object) 而不是其 C# 对应项 IEnumerable<dynamic>。
我的问题是:有没有办法用 Dapper 和 VB.Net 做我想做的事?
【问题讨论】:
标签: .net vb.net dynamic dapper