Prédicate avec DapperExtensions

c# dapper

Question

Im essayant de faire une méthode générique Find avec DapperExtensions

C'est ma méthode

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

Mais je reçois System.NullReferenceException sur cette ligne. var predicate = Predicates.Field<T>(expression, Operator.Eq, true);

Ceci provient de la documentation d'aide de DapperExtensions. Mais j'essaie de la convertir en une méthode générique.

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

Réponse acceptée

Je n'ai pas reproché, mais il semblerait que le problème soit, en partie, que vous rendiez l'expression plus complexe que l'exemple. À titre de suggestion, essayez:

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

et:

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

Ceci est complètement non testé, basé uniquement sur vos commentaires et l'exemple.

Si votre base de code ne rend pas cela pratique, alors je suggère d' essayer simplement avec ce qui précède pour voir si cela fonctionne , car il existe des moyens de séparer une expression pour extraire ces pièces. Mais cela ne vaut pas la peine de donner un exemple avant de savoir si cela fonctionne.




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