Come implementare la clausola "NOT IN" con Dapper Extensions Predicate?

Sep 04 2020

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

2 AmitJoshi Sep 10 2020 at 14:21

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.