Come implementare la clausola "NOT IN" con Dapper Extensions Predicate?
Ho trovato come implementare la INclausola utilizzando le estensioni Dapper qui .
Ora, voglio implementare la NOT INclausola.
Quindi, mi aspetto una query SQL come di seguito:
SELECT * FROM MyTable
WHERE MyField NOT IN (param1, param2)
Ma non sono riuscito a trovare nulla su NOT INo NOTclausola in Dapper Extensions.
Come posso implementare la NOT INclausola con Dapper Extensions Predicate?
Risposte
Fare riferimento a questa risposta (collegata anche alla domanda) per capire come implementare la INclausola.
Per trasformare la INclausola sopra menzionata in NOT INclausola, utilizzare l'ultimo bool notparametro.
Questo è un parametro facoltativo e il valore predefinito è false.
È per questo; anche se così ovvio, è un po ' nascosto e quindi da scoprire .
La documentazione non lo menziona nemmeno esplicitamente.
Di seguito sono riportate le definizioni di ciascun predicato definito nel codice sorgente di Dapper Extensions:
public static class Predicates
{
public static IBetweenPredicate Between<T>(Expression<Func<T, object>> expression, BetweenValues values, bool not = false) where T : class;
public static IExistsPredicate Exists<TSub>(IPredicate predicate, bool not = false) where TSub : class;
public static IFieldPredicate Field<T>(Expression<Func<T, object>> expression, Operator op, object value, bool not = false) where T : class;
public static IPropertyPredicate Property<T, T2>(Expression<Func<T, object>> expression, Operator op, Expression<Func<T2, object>> expression2, bool not = false)
where T : class
where T2 : class;
}
Il codice di esempio è il seguente:
var predicate = Predicates.Field<Customer>
(f => f.CustomerID, Operator.Eq, listOfIDs, true);
Osservare il valore trueper l'ultimo parametro nel codice sopra. Il listOfIDsè una IEnumerabledel vostro tipo di dati.
Fare riferimento a questo per più codice sorgente.