Nhibernate 如何查询每个层次结构中存在哪些子类的表

Nhibernate 如何查询每个层次结构中存在哪些子类的表,nhibernate,linq-to-nhibernate,queryover,Nhibernate,Linq To Nhibernate,Queryover,一个简单的例子 abstract class Car { public virtual long SerialNumber { get; set; } } class Mercedes : Car { } class Fiat : Car { } class Toyota : Car { } 现在我想查询从car继承的哪些类型有库存。如何做到这一点?还是我的设计有缺陷 范例 session.Save(new Mercedes() { SerialNumber = 1 }); se

一个简单的例子

abstract class Car
{
    public virtual long SerialNumber { get; set; }
}

class Mercedes : Car { }

class Fiat : Car { }

class Toyota : Car { }
现在我想查询从car继承的哪些类型有库存。如何做到这一点?还是我的设计有缺陷

范例

session.Save(new Mercedes() { SerialNumber = 1 });
session.Save(new Mercedes() { SerialNumber = 2 });
session.Save(new Toyota() { SerialNumber = 1 });

// later
var models = session2.Query<Car>().SelectDistinct(car => car.GetType().Name);

showModelComboBox.Items = models;
session.Save(new Mercedes(){SerialNumber=1});
Save(new Mercedes(){SerialNumber=2});
Save(newtoyota(){SerialNumber=1});
//后来
var models=session2.Query().SelectDistinct(car=>car.GetType().Name);
showModelComboBox.Items=模型;

从我所看到的情况来看,以下方法很有效:

var models = session.Query<Car>().Select(x => x.GetType().Name).ToList();

它将返回原始鉴别器,这并不理想,但它可以工作。

我认为它是
库存
中定义的属性。
session.QueryOver().Where(w=>w.InStock)
不工作吗?这是您的实际域吗?对于继承来说,它看起来不是一个好的用例。如果您想要筛选的属性在您的
car
类中,那么它就是possible@DiegoMijelshon我的领域其实很相似。根据类型,附加了大量业务逻辑,许多列仅对特定类型有效。然而,我有一个用例,在这个用例中,我应该过滤数据库中的现有记录,并且只想显示数据库中实际存在的选项。实际上,模式是一个典型的TPH,所有行有一半的列是公共的,然后依赖于单个行的类型列列列。因为即使是一对多都取决于类型,我认为这将是一个好主意。
var models = session.CreateQuery("select c.class from Car c").List();