【发布时间】:2013-11-27 15:14:12
【问题描述】:
有没有办法将 ICriteria 结果用作后续条件查询的“基础”?
例如,如果我想创建一个查询
SELECT department_id, sum(cost) AS total
FROM payment
GROUP BY payment.department_id
将结果存储为query0,然后执行查询
SELECT department.name, total
FROM department, query0
JOIN LEFT ON department.id=query0.id
WHERE total > 3
我不想一次执行一个巨大的查询(这将是创建带有子查询的 ICriteria 的结果)。请注意,我对第一个查询的结果有一个选择/限制,同时在第二个查询的投影中包括它的一个列。
标准是使用字符串动态生成的,以识别类。
【问题讨论】:
-
我不熟悉 ICriteria,但不能将第一个查询用作基础或根查询,然后围绕它包装一个新的选择??
-
也许你应该只过滤你 query0 的 department_ids 并且总数 > 3,然后在你的第二个查询中获取带有 IN 子句的部门。当 IN 列表真的很大时,来自 Ayende 的关于这个问题的好帖子:ayende.com/blog/2583/nhibernates-xml-in 以及指向 XmlIn.cs 的完整链接:code.google.com/p/hornget/source/browse/trunk/package_tree/…
-
@Kay Nelson 这正是分离标准与合并但单一查询的方法。 @jbl我仍然需要投影中的总数。而且这个解决方案只适用于这种特殊情况(例如,如果连接结束
department.id=query0.id AND department.XYZ==query0.XYZ则不行) -
我想为您的查询创建一个视图0 并映射此视图可能是一种选择
-
你的意思是在数据库中创建视图?这太特定于数据库了。多亏了 NHibernate,查询和应用程序仍然独立于数据库,并且不需要必须遵守特定于 db 的语法的 SQL 字符串
标签: nhibernate criteria nhibernate-criteria