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 bindingu.SumAu.SumBNew 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<dynamic>代わりに、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は合法ですか? はい、理由を学ぶ