Predicado con DapperExtensions

c# dapper

Pregunta

Estoy tratando de hacer un método Find genérico con DapperExtensions

Este es mi método

 public IEnumerable<T> Find(Expression<Func<T, object>> expression)
    {
        using (IDbConnection cn = GetCn())
        {
            cn.Open();

            var predicate = Predicates.Field<T>(expression, Operator.Eq, true);
            return cn.GetList<T>(predicate);
        }
    }

Pero obtengo System.NullReferenceException en esta fila var predicate = Predicates.Field<T>(expression, Operator.Eq, true);

Esto es de la documentación de ayuda de DapperExtensions. Pero intento convertir esto a un método genérico.

using (SqlConnection cn = new SqlConnection(_connectionString))
{
    cn.Open();
    var predicate = Predicates.Field<Person>(f => f.Active, Operator.Eq, true);
    IEnumerable<Person> list = cn.GetList<Person>(predicate);
    cn.Close();
}

Respuesta aceptada

No he reprobado, pero parece que el problema es, en parte, que estás haciendo que la expresión sea más compleja que el ejemplo. Como sugerencia, intente:

public IEnumerable<T> Find<TValue>(Expression<Func<T, TValue>> expression,
                                   TValue value)
{
    using (IDbConnection cn = GetCn())
    {
        cn.Open();

        var predicate = Predicates.Field<T>(expression, Operator.Eq, value);
        return cn.GetList<T>(predicate);
    }
}

y:

var data = Find(p => p.MarketId, marketId);

Esto no se ha probado por completo, solo con sus comentarios y el ejemplo.

Si su código base no lo hace práctico, entonces le sugiero que lo intente con lo anterior para ver si eso funciona , porque hay maneras de separar una expresión para extraer esas piezas. Pero no vale la pena dar un ejemplo de eso hasta que sepamos si lo anterior funciona.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué