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();