Como implementar a cláusula “NOT IN” com Dapper Extensions Predicate?
Eu descobri como implementar INcláusulas usando extensões Dapper aqui .
Agora, eu quero implementar a NOT INcláusula.
Portanto, estou esperando uma consulta SQL algo como a seguir:
SELECT * FROM MyTable
WHERE MyField NOT IN (param1, param2)
Mas eu não consegui encontrar nada sobre NOT INou NOTcláusula em Dapper Extensions.
Como posso implementar NOT INcláusula com Dapper Extensions Predicate?
Respostas
Por favor, consulte esta resposta (ligada na pergunta também) para entender como implementar a INcláusula.
Para transformar a INcláusula conforme mencionado acima em NOT INcláusula, use o último bool notparâmetro.
Este é um parâmetro opcional e seu valor padrão é false.
É por isso que; embora seja tão óbvio, está um pouco escondido e, portanto, desconhecido .
A documentação também não o menciona explicitamente.
Abaixo estão as definições de cada predicado definido no código-fonte das extensões 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;
}
O código de amostra é o seguinte:
var predicate = Predicates.Field<Customer>
(f => f.CustomerID, Operator.Eq, listOfIDs, true);
Observe o valor truedo último parâmetro no código acima. O listOfIDsé um IEnumerabledo seu tipo de dados.
Consulte isso para obter mais código-fonte.