NHibernate - 使用ICriteria实现“NOT IN”查询

8

我已经开始学习NHibernate。我正在尝试执行一个查询,从一个表中选择所有记录,但是要排除ID的过滤列表,例如,获取所有产品,除了这些具有这些ID值的产品。

通常在直接T-SQL中,我会将要排除的ID传递到NOT IN子句中,如下所示。

SELECT *
FROM Products
WHERE ProductId NOT IN (1,5,9,23,45)

我该如何在NHibernate中使用ICriteria或HQL(最好是ICriteria)进行此操作?
1个回答

24

试一试

.Add(Expression.Not(Expression.In("ProductID", new int[] { 1, 5, 9, 23, 45 })))

太棒了,完美地解决了问题,谢谢。这是我最终实现的完整代码...query.Add(Expression.Not(Expression.In("ProductType.Id", excludedProductTypeIds.ToArray())));我看到了'Not'和'In'方法,但没有想到像那样链接它们。 - Sunday Ironfoot
是的,你也可以使用 OR 和 AND 命令来执行相同的操作。 - Spencer Ruport
顺便提一下,我不确定其他SQL方言/引擎是如何配合工作的,但SQL Server有2100个查询参数限制,NHibernate使用参数填充其IN语句,并且如果您的excludedProductTypeIds超过2100,则会失败。 - Spencer Rose
如果你有那么多的项目,使用临时表或其他方法可能更合理。 - Spencer Ruport

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接