与 NHibernate 和标准联合:
是否可以在 Criteria 或 QueryOver 中使用?如果没有,是否有任何其他方法可以在同一查询中实现两个结果的联合?
与 NHibernate 和标准联合:
是否可以在 Criteria 或 QueryOver 中使用?如果没有,是否有任何其他方法可以在同一查询中实现两个结果的联合?
即使使用 HQL,这也是不可能的。请参阅此其他 SO帖子
一种方法是退回到原始 SQL 并使用命名查询
<sql-query name="MyQuery">
<![CDATA[
select col1,col2 from table1
union
select col1,colA from table2
]]>
</sql-query>
并使用 AliasToBeanResultTransformer 将其转换回您的 DTO/POCO
var query = Session
.GetNamedQuery("MyQuery")
.SetResultTransformer(new AliasToBeanResultTransformer(typeof(MyDto)));
return query.List<MyDto>();
您不能直接进行联合,但您可以执行两个未来查询并将结果合并到代码中:
var resultSet1 = this.Session.CreateCriteria<A>().Future<A>();
var resultSet2 = this.Session.CreateCriteria<B>().Future<B>();
此后,当枚举任一结果集时,NHibernate 将向数据库发出单个查询,该查询将返回多个结果集。注意,如果您不使用 SQL Server,则数据库可能不支持多个结果集。
您可以使用 -
NHibernate.Criterion.Restrictions.Or(ICriterion FirstQuery,
ICriterion SecondQuery)
作为单个查询中的条件。