2012-07-16 36 views
5

下面是针对特定类型的类NHibernate的的.class相当于QueryOver

select a from Animal a 
where TYPE(a) in ('Cat', 'Dog') 
and a.sex = 'Male' 
order by a.name 


select a from Animal a 
where a.class in ('Cat', 'Dog') 
and a.sex = 'Male' 
order by a.name 

我想知道HQL查询是存在的,相当于使用QueryOver?

+0

也许有,但在此期间,你总是可以'.Where(Projections.eq(“class”,...)' – Firo 2012-07-16 07:28:00

回答

5

您可以使用GetTypeIsIn QueryOver扩展方法来实现:

session.QueryOver<Animal>() 
    .Where(a => a.GetType().IsIn(new[] { "Cat", "Dog" }) 
    /* .. etc */ 

你应该用你的NHibernate映射使用鉴别值。

+0

它没有工作顺便说一句,我想这样做的原因是因为我想解决一个问题陈述在这个线程http://stackoverflow.com/questions/11491592/nhibernate-return-a-specific-type-of-union-subclass-in-a-queryover-with-join – reggieboyYEAH 2012-07-16 15:38:08

+0

你可以扩大“它didn' t工作?“生成的SQL是什么样子的?你有没有遇到什么错误? – 2012-07-16 15:42:17

+0

对不起,基本上发生了什么,我在QueryOver中加入了TType1到TType2,它不能执行查询无法解析正在加入的类型 – reggieboyYEAH 2012-07-17 02:18:05