Comment implémenter la clause «NOT IN» avec Dapper Extensions Predicate?

Sep 04 2020

J'ai trouvé comment implémenter la INclause à l'aide des extensions Dapper ici .

Maintenant, je veux mettre en œuvre la NOT INclause.
Donc, je m'attends à une requête SQL comme ci-dessous:

SELECT * FROM MyTable
WHERE MyField NOT IN (param1, param2)

Mais je n'ai rien trouvé sur la clause NOT INou NOTdans les extensions Dapper.

Comment puis-je implémenter une NOT INclause avec Dapper Extensions Predicate?

Réponses

2 AmitJoshi Sep 10 2020 at 14:21

Veuillez vous reporter à cette réponse (également liée à la question) pour comprendre comment mettre en œuvre la INclause.

Pour transformer la INclause mentionnée ci-dessus en NOT INclause, utilisez le dernier bool notparamètre.
Il s'agit d'un paramètre facultatif et sa valeur par défaut est false.
C'est pourquoi; même s'il est si évident, il est un peu caché et donc non découvert .
La documentation ne le mentionne pas non plus explicitement.

Vous trouverez ci-dessous les définitions de chaque prédicat défini dans le code source des extensions Dapper:

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

Un exemple de code est comme ci-dessous:

var predicate = Predicates.Field<Customer>
                (f => f.CustomerID, Operator.Eq, listOfIDs, true);

Observez la valeur truedu dernier paramètre dans le code ci-dessus. Le listOfIDsest un IEnumerablede votre type de données.

Veuillez vous référer à ceci pour plus de code source.