Prädikat mit DapperExtensions
Im Versuch, um eine generische Methode Finden mit DapperExtensions
Dies ist meine Methode
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);
}
}
Aber ich bekomme System.NullReferenceException
auf diese Zeile var predicate = Predicates.Field<T>(expression, Operator.Eq, true);
Dies ist aus der DapperExtensions Hilfe-Dokumentation
Aber ich versuche zu konvertieren, um eine Generische Methode.
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();
}
- Was ist die Art von Ausdruck, den Sie passieren? Da insbesondere das Beispiel ist
Func<T,bool>
, wo-wie bei Ihnen istFunc<T,object>
- das ist der offensichtlichste Unterschied, den ich sehen kann... - Dies ist, was ich übergeben Finden(p => p.MarketId == marketId);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich nicht reproduzieren würde, aber es sieht wie das Problem ist zum Teil, dass Sie die expression komplexer als das Beispiel. Als Anregung, versuchen Sie:
und:
Dies ist völlig ungetestet, basierend nur auf Ihre Kommentare und das Beispiel.
Wenn Ihre code-Basis nicht, dass praktisch, dann würde ich einfach vorschlagen versuchen es mit den oben genannten zu sehen, ob das funktioniert, denn es gibt Möglichkeiten, zu ziehen neben einem Ausdruck zu extrahieren Stücke. Aber es lohnt sich nicht geben ein Beispiel, dass, bis wir wissen, ob die oben genannten arbeiten.
var matchingPersons = conn.Find<Person>(p => p.MarketId == marketId);
. Ich möchte auseinander zu ziehen, den Ausdruck so, dass ich bauen kann, das Prädikat, die GetList<T>() erfordert: die parameter (p.MarketId
), der Betreiber (Operator.Eq, Operator.Gt, Operator.Lt ...
), und der Wert (marketId
). Danke.Expression<Func<T, object>
weilPredicates.Field<T>
erwartet und nichtExpression<Func<T, TValue>