SELECT
[whatever]
FROM
[whatever]
INNER JOIN dbo.FnMyTableValuedFunction() as MyAlias ON
[whatever].FirstDesiredKey = MyAlias.FirstDesiredKey
AND
[whatever].SecondDesiredKey = MyAlias.SecondDesiredKey
或者可以这样写:
SELECT
[whatever]
FROM
[whatever]
WHERE
EXISTS(
SELECT
1
FROM
dbo.FnMyTableValuedFunction() AS MyAlias
WHERE
[whatever].FirstDesiredKey = MyAlias.FirstDesiredKey
AND
[whatever].SecondDesiredKey = MyAlias.SecondDesiredKey
)
我想使用Criteria API生成此类查询。 据我所知,没有办法告诉NHibernate它应该加入什么以及如何加入。因此,可能存在的一个解决方案是第二个解决方案 不幸的是,我没有幸运地找到如何使用表值函数作为相关子查询的查询源。你能帮帮我吗?
答案 0 :(得分:0)
除SQL(HQL,Criteria,Linq,QueryOver)之外的所有NHibernate查询方法都适用于实体,而不是表或任何其他数据库工件。
因此,如果您正在使用Criteria,则需要将FnMyTableValuedFunction
映射到实体,或使用SQLCriterion
作为任意SQL块。
对于后者,是的,EXISTS
可能是要走的路。您可以将整个条件(包括EXISTS)括在SQLCriterion中。
答案 1 :(得分:0)
您可以将自定义方法添加到派生的SQLDialect中,并在条件中使用它,查看所有Dialects继承的NHibernate.Dialect.Dialect中的RegisterFunction
。