NHibernate投影元素集合

NHibernate投影元素集合,nhibernate,queryover,nhibernate-criteria,Nhibernate,Queryover,Nhibernate Criteria,我想为给定的经理选择所有未完成的请求。经理可以有多个团队 我根据权限应用各种限制组合查询,并更改查询以提供行计数、存在性检查、子查询等 该组合使用QueryOver,但也可以使用ICriteria 给定以下类别 class Team { public virtual int Manager { get; set; } public virtual ISet<int> Members { get; set; } } class Request { public

我想为给定的经理选择所有未完成的请求。经理可以有多个团队

我根据权限应用各种限制组合查询,并更改查询以提供行计数、存在性检查、子查询等

该组合使用QueryOver,但也可以使用ICriteria

给定以下类别

class Team {
    public virtual int Manager { get; set; }
    public virtual ISet<int> Members { get; set; }
}

class Request {
    public virtual int Owner { get; set; }
    public virtual bool IsOutstanding { get; set; }
}

class static SomeRestrictions {
    public static void TeamsForManager<TRoot> (this IQueryOver<TRoot, Team> query, int managerId) {
        // In reality this is a little more complex
        query.Where (x => x.Manager == managerId);
    }
}
这是我正在尝试的当前查询,但它不起作用

var users = QueryOver.Of<Team> ();
users.TeamsForManager (5)
users.Select (/* not sure */);

var requests = session.QueryOver<Request> ()
    .Where (x => x.IsOutstanding)
    .WithSubquery.WhereProperty (x => x.Owner).In (users);
选择用户的HQL为:

"SELECT m FROM Team t JOIN t.Members m WHERE <TeamsForManager restrictions>"

但我不想使用HQL,因为我无法根据权限将它与其他限制组合在一起。我也无法将其与其他查询组合,以将其转换为行计数/存在性检查等。

我看到您更改了模型,但这就是方法

var users = QueryOver.Of<Team> ();
users.TeamsForManager (5);
users.JoinAlias(t => t.Members, () => membervalue).Select(() => membervalue);

我不完全理解这个问题,但可能是用户。选择Projections.Id;这是您需要的吗?问题是,当我在查找元素的值时,会选择团队的id。现在似乎不可能,所以我改了域模型。问题是,成员是ISet,没有id。它是原始元素的集合。幸运的是,这也不起作用。看起来这个问题最近才在Hibernate本身HHH-3646中得到解决。希望这一变化能很快进入NHibernate。