nhibernate表pr层次结构使用LINQ获取特定类

时间:2009-08-14 08:26:03

标签: linq nhibernate class filtering

我有一个映射到一个表的类层次结构。有一个超类和8个不同的子类。我的很多查询都需要获取,例如2个子类仅适用于特定日期。 该表有一个nhibernate自己使用的鉴别器列。但是当使用LINQ进行查询时,不可能使用这个鉴别器,因为它没有属性。

在使用nhibernate时,是否有一个常用的技巧只能获取特定的子类?

现在我首先使用Linq 4 Nhiberneate查询来获取给定时间段内的所有子类。然后使用Linq 4对象来过滤我需要的子类。

是否可以将表的discriminator列公开为属性,从而能够在其上创建where子句?

1 个答案:

答案 0 :(得分:2)

在Hql中查询子类是由类完成的,所以你要做

from subclass 
where subclass.DateTime = :myDateTime

文档还说您可以通过特殊的类属性查询层次结构,例如:

from Eg.Cat cat where cat.class = Eg.DomesticCat

我不知道是否可以使用Criteria API或NH Linq Provider。

您总是可以使用正确的时间获取所有实例,然后过滤客户端,例如:

var allCandidates = from super in session.Linq<SuperClass>()
    where super.Date > DateTime.Now.AddDays(-1)
    select super
var results = from candidate in allCandidates
    where candidate.GetType() == typeof(SubClass)
    select candidate

这有点讨厌,如果您查询的类的子集总是相同的,那么最好在层次结构中插入另一个类并查询它。