与NHibernate和Criteria结盟:
是否可以在Criteria或QueryOver中使用? 如果没有,是否有其他方法可以在同一个查询中实现两个结果的并集?
答案 0 :(得分:6)
即使使用HQL也无法做到这一点。见另一个S.O. post
一种方法是回退到原始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>();
答案 1 :(得分:6)
您无法直接进行联合,但您可以执行两个将来的查询并将结果合并到代码中:
var resultSet1 = this.Session.CreateCriteria<A>().Future<A>();
var resultSet2 = this.Session.CreateCriteria<B>().Future<B>();
在此之后,当枚举任一结果集时,NHibernate将向数据库发出单个查询,该查询将返回多个结果集。请注意,如果您不使用SQL Server,则数据库可能不支持多个结果集。
答案 2 :(得分:3)
您可以使用 -
NHibernate.Criterion.Restrictions.Or(ICriterion FirstQuery,
ICriterion SecondQuery)
作为单个查询中的标准。