Jak zaimplementować klauzulę „NOT IN” z Dapper Extensions Predicate?
Dowiedziałem się, jak zaimplementować INklauzulę za pomocą Dapper Extensions tutaj .
Teraz chcę zaimplementować NOT INklauzulę.
Spodziewam się więc zapytania SQL, takiego jak poniżej:
SELECT * FROM MyTable
WHERE MyField NOT IN (param1, param2)
Ale nie mogłem znaleźć nic na temat NOT INlub NOTklauzuli w Dapper Extensions.
Jak mogę zaimplementować NOT INklauzulę za pomocą predykatu Dapper Extensions?
Odpowiedzi
Proszę odnieść się do tej odpowiedzi (również w pytaniu z linkiem), aby zrozumieć, jak wdrożyć INklauzulę.
Aby zamienić INklauzulę, jak wspomniano powyżej, na NOT INklauzulę, użyj ostatniego bool notparametru.
Jest to parametr opcjonalny i jego wartość domyślna to false.
Dlatego; choć tak oczywiste, jest nieco ukryte i nieodkryte .
Dokumentacja również nie wspomina o tym wprost.
Poniżej znajdują się definicje każdego predykatu zdefiniowanego w kodzie źródłowym 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;
}
Przykładowy kod jest jak poniżej:
var predicate = Predicates.Field<Customer>
(f => f.CustomerID, Operator.Eq, listOfIDs, true);
Obserwuj wartość trueostatniego parametru w powyższym kodzie. Jest listOfIDsto IEnumerabletyp danych.
Proszę odnieść się do tego, aby uzyskać więcej kodu źródłowego.