¿Cómo implementar la cláusula "NOT IN" con Dapper Extensions Predicate?
Encontré cómo implementar la INcláusula usando Dapper Extensions aquí .
Ahora, quiero implementar la NOT INcláusula.
Entonces, espero una consulta SQL como la siguiente:
SELECT * FROM MyTable
WHERE MyField NOT IN (param1, param2)
Pero no pude encontrar nada sobre NOT INo NOTcláusula en Dapper Extensions.
¿Cómo puedo implementar una NOT INcláusula con Dapper Extensions Predicate?
Respuestas
Consulte esta respuesta (vinculada en la pregunta también) para comprender cómo implementar la INcláusula.
Para convertir la INcláusula como se mencionó anteriormente en NOT INcláusula, use el último bool notparámetro.
Este es un parámetro opcional y su valor predeterminado es false.
Es por eso que; aunque es tan obvio, está un poco escondido y por lo tanto no descubierto .
La documentación tampoco lo menciona explícitamente.
A continuación se muestran las definiciones de cada predicado definido en el código fuente de 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;
}
El código de muestra es el siguiente:
var predicate = Predicates.Field<Customer>
(f => f.CustomerID, Operator.Eq, listOfIDs, true);
Observe el valor truedel último parámetro en el código anterior. El listOfIDses uno IEnumerablede su tipo de datos.
Consulte esto para obtener más código fuente.