2017-10-02 2 views
1

Ich versuche zu erstellen, was scheint wie eine relativ einfache Prädikat Aussage für Dapper-Extensions in C# nach einer guten Anzahl von diesen, aber in einem Fall muss ich zwei Felder vergleichen, anstatt ein Feld und ein fester Objektwert:Prädikat Vergleich zweier Felder mit DapperExtensions

multiPred.Add<ChargingProfile>(new PredicateGroup 
{ 
    Operator = GroupOperator.And, 
    Predicates = new List<IPredicate> 
    { 
     Predicates.Field<ChargingProfile>(f => f.EndDt, Operator.Eq, null, true), 

     // the below statement should check if f.NextChargeDt is greater than f.EndDt 
     // (string value is obviously not correct, but to illustrate) 
     Predicates.Field<ChargingProfile>(f => f.NextChargeDt, Operator.Gt, "f.EndDt") 
    } 
}); 

ich kann nicht (oder nicht wissen, wie man) Zugriff auf den Ausdruck im Parameter Wert, so muss es ein anderer Weg, dies zu tun?

Vielen Dank für Ihre Einsichten.

Antwort

2

Sie können Property verwenden für das Erstellen eines Prädikat:

var predicate = Predicates.Property<TwoFieldsTable, TwoFieldsTable>(f => f.Field1, Operator.Eq, f2 => f2.Field2); 
var res = conn.GetList<TwoFieldsTable>(predicate); 
+0

Dank Michael. Ich habe diese Informationen verwendet, um die Dokumentation des Dapper-Extensions-Wikis zu aktualisieren, wo diese Art von Prädikat nur mit "TODO" gekennzeichnet wurde: https://github.com/tmsmith/Dapper-Extensions/wiki/Predicates – k3davis