鉴于此继承映射:
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="User" table="[User]" abstract="true">
<joined-subclass name="SubUser1" table="SubUser1">
<key column="UserId" />
...
</joined-subclass>
<joined-subclass name="SubUser2" table="SubUser2">
<key column="UserId" />
...
</joined-subclass>
<joined-subclass name="SubUser3" table="SubUser3">
<key column="UserId" />
...
</joined-subclass>
</class>
</hibernate-mapping>
如何查询SubUser2
和SubUser3
的所有实例?我意识到我可以这样做:
session.Linq<User>().OfType<SubUser2>()
但这只允许我按单一类型过滤。我试过这个:
session.Linq<User>().Where(user => user is SubUser2)
但是导致了这个错误:
could not resolve property: of: User
有关如何针对多个子类型表达查询的任何想法?
答案 0 :(得分:1)
据我所知,这是不可能的。也许将来会是这样。我知道他们接受补丁: - )
我只有大约500条记录和4种类型,我通常会同时查询2种或3种类型。现在,我在数据库中的每个类型上应用过滤器,然后连接结果集并在内存中进行排序和分页。
这不是最有效的解决方案,但效果很好。我选择不向User表添加多余的鉴别器列,仅用于启用此查询。
答案 1 :(得分:0)
这样的事情:
// Get them in 2 queries
var sub2 = session.Linq<SubUser2>().Select(x => x).ToList();
var sub3 = session.Linq<SubUser3>().Select(x => x).ToList();
// Join together in memory
var sub2And3 = sub2.OfType<User>().Union( sub3.OfType<User>() );