我在这里找到了如何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 实现子句?
我在这里找到了如何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 实现子句?
请参阅此答案(也有问题链接)以了解如何实施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上面代码中最后一个参数的值。这listOfIDs是IEnumerable您的数据类型。
更多源代码请参考这里。