Dapper ORM avec modèle dynamique - Comment renvoyer aucun champ au lieu de 'Champ' = NULL?

.net dapper dynamic-programming json.net orm

Question

J'utilise dapper avec des objets de modèle de retour dynamique et j'aimerais le configurer pour «ignorer» les champs qui sont nuls.

Par exemple au lieu de:

[0]: {DapperRow, Type = 'PHYS', Street1 = NULL, Street2 = NULL, State = CO}

Je voudrais que Dapper revienne

[0]: {DapperRow, Type = 'PHYS', State = CO}

Cela serait fonctionnellement similaire à la fonctionnalité "NullValueHandling" de JSON.Net.

Est-ce possible sans modifier la requête SQL sous-jacente?

L'avantage serait de réduire la taille de mon objet JSON (éventuel) sérialisé à partir du jeu de résultats de Dapper et renvoyé à un client API.

(Ceci est une question différente de celle-ci , car j'utilise des classes de modèles dynamiques)

Réponse populaire

Le type sous-jacent DapperRow implémente IDictionary afin que vous puissiez lancer cette interface et utiliser la fonction remove. La méthode d'extension suivante a bien fonctionné dans mes tests:

public static class DapperRowExtensions
{
    public static IEnumerable<dynamic> RemoveNullParams(this IEnumerable<dynamic> rows)
    {
        foreach (var row in rows)
        {
            var item = (IDictionary<string, object>)row;
            foreach (var key in item.Keys.ToList())
            {
                if (item[key] == null)
                    item.Remove(key);
            }
        }
        return rows;
    }
}

Vous l'utiliseriez alors sur le résultat de la requête:

var result = connection.Query("SELECT...");
return result.RemoveNullParams();


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