Proyecto dinámico Dapper resultados excluyendo algunas propiedades

dapper linq

Pregunta

Dada una consulta dinámica Dapper como:

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

Quiero eliminar un par de las columnas / propiedades devueltas de los resultados. El truco es que quiero hacer esto sin saber / cuidar los nombres de las propiedades que quiero conservar, de lo contrario, simplemente proyectaría los resultados en un nuevo tipo anónimo.

IDictionary<string, object> recorrer los resultados y IDictionary<string, object> a cada IDictionary<string, object> para poder simplemente eliminar el par clave / valor que contiene los datos. Desafortunadamente, por cualquier razón, el objeto FastExpando interno subyacente no implementa el método Remove. El código fuente de FastExpando muestra:

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

¿Cómo puedo implementar esto? Para ser claro, básicamente quiero:

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

Respuesta aceptada

No había ninguna razón para que FastExpandoObject no implementara esos métodos, a excepción de: no era necesario. Ahora he completado todos los métodos faltantes / NotImplementedException . Todavía no me he implementado en NuGet, pero el código en github / google-code se ha actualizado.


Respuesta popular

¿Qué FastExpandoObject si itera el FastExpandoObject y devuelve un ExpandoObject filtrado?

 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;
                    });


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow