Nhibernate。QueryOver中的类等价物

Nhibernate。QueryOver中的类等价物,nhibernate,nhibernate-mapping,hql,queryover,Nhibernate,Nhibernate Mapping,Hql,Queryover,下面是针对特定类型类的HQL查询 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 我想知道是否存在使用QueryOver的等效方法?您可以使用GetType和IsInQueryOve

下面是针对特定类型类的HQL查询

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

我想知道是否存在使用QueryOver的等效方法?

您可以使用
GetType
IsIn
QueryOver扩展方法来实现这一点:

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

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

可能有,但在此期间您可以始终
。其中(Projections.eq(“class”),它不起作用。
顺便说一句,我之所以要这样做,是因为我想解决此线程中说明的问题。您可以扩展到“它不起作用吗?”生成的SQL是什么样子的?您是否遇到错误?很抱歉,基本上发生的是我在查询中将TType1连接到TType2,但它无法执行查询无法解析所连接的类型。我的查询类似于session.QueryOver().JoinAlias(x=>x.propertyoftype2,…)。其中(x=>x.propertyoftype2.GetType().IsIn(..)这是可行的,但请注意,
IsIn
数组必须与数据库中的鉴别器值的类型相同。如果鉴别器是字符串,则数组必须是字符串。如果鉴别器是int,则数组必须是int。