NHibernate投射元素集合

时间:2011-09-21 18:08:40

标签: nhibernate queryover nhibernate-criteria

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

我根据权限编写应用各种限制的查询,并更改查询以提供行计数,存在检查,子查询等。

组合使用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,因为我无法使用基于权限的其他限制来构建它。我也无法将其与其他查询组合在一起,将其转换为行计数/存在检查等。

1 个答案:

答案 0 :(得分:1)

我看到你改变了模型,但这就是

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