C# 使用NHibernate.Linq按子类型筛选实体

C# 使用NHibernate.Linq按子类型筛选实体,c#,nhibernate,linq-to-nhibernate,C#,Nhibernate,Linq To Nhibernate,给定此继承映射: <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="User" table="[User]" abstract="true"> <joined-subclass name="SubUser1" table="SubUser1"> <key column="UserId" />

给定此继承映射:

<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>
但这只允许我按单一类型进行过滤。我试过这个:

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

关于如何表达针对多个子类型的查询,您有什么想法吗?

下面是这样的:

// 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>() );
//在两个查询中获取它们
var sub2=session.Linq().Select(x=>x.ToList();
var sub3=session.Linq().Select(x=>x.ToList();
//在记忆中结合在一起
var sub2And3=sub2.OfType().Union(sub3.OfType());

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

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


这不是最有效的解决方案,但效果很好。我选择不向用户表中添加多余的鉴别器列来启用此查询。

我也有同样的问题。你知道如何在标准中做到这一点吗?当在条件中可能时,必须能够使“is”操作符工作。不幸的是,这不允许我表达对数据库的查询。我将在内存中应用筛选、排序和分页。也许你可以在数据库上应用Union(尽管不确定是否支持)。我在阅读你的答案时尝试过,Union不受支持。
could not resolve property:  of: User
// 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>() );