Résultats du projet Dapper dynamiques excluant certaines propriétés

dapper linq

Question

Étant donné une requête Dapper dynamique telle que:

var results = connection.Query<dynamic>("SELECT ....");

Je veux supprimer quelques colonnes / propriétés renvoyées des résultats. L'astuce est que je veux faire cela sans connaître / soigner les noms des propriétés que je veux conserver, sinon je projetterais simplement les résultats dans un nouveau type anonyme.

J'ai tenté de parcourir les résultats et de les convertir chacun en un IDictionary<string, object> afin que je puisse simplement supprimer la paire clé / valeur contenant les données. Malheureusement, pour quelque raison que ce soit, l'objet interne FastExpando sous-jacent n'implémente pas la méthode Remove. Le code source de FastExpando indique:

bool IDictionary<string, object>.Remove(string key)
{
    throw new NotImplementedException();
}

Comment puis-je implémenter cela? Pour être clair, je veux essentiellement:

var filteredResults = from r in results
                      select new { // All properties except a couple of well-known ones }

Réponse acceptée

Il n'y avait aucune raison pour que FastExpandoObject pas ces méthodes, FastExpandoObject : il n'en avait pas eu besoin. J'ai maintenant rempli toutes les méthodes manquantes / NotImplementedException . Je n'ai pas encore déployé sur NuGet, mais le code sur github / google-code a été mis à jour.


Réponse populaire

Que faire si vous FastExpandoObject le FastExpandoObject et renvoyez un ExpandoObject filtré?

 var filteredResults = dynamicResult.Select<dynamic, dynamic>(x =>
                    {
                        var filteredRow = new ExpandoObject() as IDictionary<string, Object>;
                        var props = x as IDictionary<string, object>;
                        foreach (var prop in props)
                        {
                            if (!filter.Contains(prop.Key))
                                filteredRow.Add(prop);
                        }
                        return filteredRow;
                    });



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