Nhibernate 带有类型检查的Where子句;是";操作员不使用鉴别器

Nhibernate 带有类型检查的Where子句;是";操作员不使用鉴别器,nhibernate,nhibernate-mapping,nhibernate-criteria,Nhibernate,Nhibernate Mapping,Nhibernate Criteria,我已经在NHibernate中映射了一个类层次结构。简单地说: class abstract Animal class Dog : Animal class Cat: Animal class Cow: Animal 在映射中,我在ANIMAL_TYPE列上设置了鉴别器值: Dog -> dog Cat -> cat Cow -> cow 所有类型的查询都有效。除了这个,当我需要获取两种特定类型的对象时。我写的是这样的: QueryOver.Of<Animal>

我已经在NHibernate中映射了一个类层次结构。简单地说:

class abstract Animal
class Dog : Animal
class Cat: Animal
class Cow: Animal
在映射中,我在ANIMAL_TYPE列上设置了鉴别器值:

Dog -> dog
Cat -> cat
Cow -> cow
所有类型的查询都有效。除了这个,当我需要获取两种特定类型的对象时。我写的是这样的:

QueryOver.Of<Animal>().Where(animal => animal is Dog || theme is Cat)
这很好,但是@p0@p1参数中的值包含完整的类名,例如

Zoo.Model.Cat

而不是鉴别器值。我怎样才能解决它?是否必须使鉴别器值与类型名称保持同步?如果可能的话,我想避免这个问题。

这个问题和答案应该适合你:(在你之前一天问)

var query=session.QueryOver()
.Where(animal=>animal.GetType()==typeof(Dog)
||animal.GetType()==typeof(Cat)
);
var list=query.list();
Zoo.Model.Cat
var query = session.QueryOver<Animal>()
    .Where(animal => animal.GetType() == typeof (Dog) 
                  || animal.GetType() == typeof (Cat)
          );

var list = query.List<Animal>();