C# NHibernate Linq查询,其中(x=>x是基类)不获取派生对象

C# NHibernate Linq查询,其中(x=>x是基类)不获取派生对象,c#,nhibernate,fluent-nhibernate,linq-to-nhibernate,C#,Nhibernate,Fluent Nhibernate,Linq To Nhibernate,假设我有以下结构,每个层次映射一个鉴别器表: Entity (abstract, no discriminator) | Animal (abstract, no discriminator) / \ Dog (1) Cat(2) 如果我使用Linq to NHibernate对此进行查询: .Where(x => x.Entity is Animal) 我没有结果。查看生成的查询时,我希望看到: where type in (1, 2)

假设我有以下结构,每个层次映射一个鉴别器表:

    Entity (abstract, no discriminator)
      |
    Animal (abstract, no discriminator)
    /    \
Dog (1)  Cat(2)
如果我使用Linq to NHibernate对此进行查询:

.Where(x => x.Entity is Animal)
我没有结果。查看生成的查询时,我希望看到:

where type in (1, 2)
但我得到的却是:

where type='animal'
Animal是抽象的,甚至没有鉴别器,因此生成的查询毫无意义


再深入一点,我发现查询在内部被转换为类似于HQL中x.class=animal的地方。这是Linq到NHibernate的错误吗?还是预期的行为?

使用时是否得到预期的结果

相反?那些人应该处理多态性

虽然您的lambda x.Entity is Animal很可能被转换为x.Entity.class=Animal,但它不处理多态性,只接受指定类的鉴别器值,默认为其类名。

我修复了此错误,将此功能添加到NHibernate。这些更改是并且可以从源代码构建。我发出了一个拉请求,所以希望这将很快工作

更新:它是,并且应该在下一版本中可用。

如果我执行session.Query.ToList,我将获得预期的查询,请键入1,2。如果我回答你的问题,我想这也行。问题只存在于.x=>x。实体是动物。我可以这样做。Wherex=>session.Query.Selecta=>a.Id.Containsx.Entity.Id,但是我得到了一个复杂的子查询,其中select Id中的Id来自。。。。
session.Query<Animal>().Select(a => a.yourXEntity).ToList()
session.Query<Animal>().SelectMany(a => a.yourXEntityCollection).ToList()