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

时间:2012-07-19 12:12:05

标签: nhibernate linq-to-nhibernate queryover

一个简单的例子

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

class Mercedes : Car { }

class Fiat : Car { }

class Toyota : 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;

1 个答案:

答案 0 :(得分:1)

从我所看到的,以下作品:

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

...你可以稍后申请Distinct ......但它实际上是在取整个实体。 不好。

看起来Distinct无法应用于GetType表达式。

现在,您可以执行以下操作:

var models = session.CreateQuery("select c.class from Car c").List();

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