0

我在这里找到了如何IN使用 Dapper Extensions 实现子句。

现在,我想实施NOT IN条款。
所以,我期待 SQL 查询如下所示:

SELECT * FROM MyTable
WHERE MyField NOT IN (param1, param2)

但是我在 Dapper Extensions 中找不到任何关于NOT INor子句的内容。NOT

如何NOT IN使用 Dapper Extensions Predicate 实现子句?

4

1 回答 1

2

请参阅此答案(也有问题链接)以了解如何实施IN子句。

要将IN上面提到的子句转换为NOT IN子句,请使用最后一个bool not参数。
这是可选参数,默认值为false.
这就是为什么; 即使如此明显,它也有点隐藏,因此未被发现
文档也没有明确提及。

以下是 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;
}

示例代码如下:

var predicate = Predicates.Field<Customer>
                (f => f.CustomerID, Operator.Eq, listOfIDs, true);

观察true上面代码中最后一个参数的值。这listOfIDsIEnumerable您的数据类型。

更多源代码请参考这里

于 2020-09-10T14:21:01.663 回答