Jak zaimplementować klauzulę „NOT IN” z Dapper Extensions Predicate?

Sep 04 2020

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

2 AmitJoshi Sep 10 2020 at 14:21

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.