Interroger et utiliser un objet dynamique / anonyme à partir de Dapper dans VB.Net

.net dapper dynamic vb.net

Question

J'ai une requête dans laquelle j'effectue des calculs complexes, y compris la gestion NULL et des cas spéciaux pour la division par 0. Ceci est un exemple simplifié, fourni uniquement comme contexte du problème:

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

Pour améliorer la maintenabilité et la lisibilité, je voudrais laisser les calculs être effectués par code .Net. La requête serait similaire à cet exemple:

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

Ensuite, je devrais interroger ces champs (avec Dapper), qui ne sont pas définis dans un POCO spécifique. En C #, je pourrais faire quelque chose de similaire à ce qui est fait dans cette réponse et dans ses commentaires . Cependant, dans VB.Net avec Option Strict On , je ne peux pas faire cela.

Pour mieux décrire ce que j'essaie de faire, u.SumB à quoi cela pourrait ressembler, si ce n'était de l'erreur Option Strict On disallows late binding sur u.SumA et u.SumB dans l'instruction New With . Notez que je mets Option Infer On en haut de ma classe:

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

Cela est probablement dû au manque de type dynamic dans VB. Par conséquent, le remplacement de Query non générique renvoie un objet IEnumerable(Of Object) au lieu de son homologue C #, IEnumerable<dynamic> .

Ma question est la suivante: y a-t-il un moyen de faire ce que je veux faire avec Dapper et VB.Net?

Réponse populaire

Je viens d'écrire une classe de données simple (private / inner), qui possède toutes les propriétés dont vous avez besoin pour mapper. Je sais que c'est triste, mais c'est vb.net ...




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi