【问题标题】:Query and use dynamic/anonymous object from Dapper in VB.Net在 VB.Net 中从 Dapper 查询和使用动态/匿名对象
【发布时间】: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&lt;dynamic&gt;。

我的问题是:有没有办法用 Dapper 和 VB.Net 做我想做的事?

【问题讨论】:

    标签: .net vb.net dynamic dapper


    【解决方案1】:

    我刚刚编写了一个简单的(私有/内部)数据类,它具有您需要映射的所有属性。我知道这很可悲,但那是 vb.net...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 2021-08-01
      相关资源
      最近更新 更多