2

鉴于此继承映射:

<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>

如何查询SubUser2and的所有实例SubUser3?我意识到我可以做到这一点:

session.Linq<User>().OfType<SubUser2>()

但这仅允许我按一种类型进行过滤。我试过这个:

session.Linq<User>().Where(user => user is SubUser2)

但这导致了这个错误:

could not resolve property:  of: User

关于如何表达针对多个子类型的查询的任何想法?

4

2 回答 2

1

据我所知,这是不可能的。也许它会在未来。我知道他们接受补丁 :-)

我只有大约 500 条记录和 4 种类型,并且通常同时查询 2 或 3 种类型。现在,我正在对数据库中的每种类型应用过滤器,然后连接结果集并在内存中进行排序和分页。

这不是最有效的解决方案,但效果很好。我选择不将多余的鉴别器列添加到 User 表中,只是为了启用此查询。

于 2009-08-30T17:29:30.950 回答
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>() );
于 2009-08-30T03:53:15.637 回答