Comment implémenter la clause «NOT IN» avec Dapper Extensions Predicate?
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
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.