2

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

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

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

4

1 回答 1

1

我看到你改变了模型,但这本来是这样的

var users = QueryOver.Of<Team> ();
users.TeamsForManager (5);
users.JoinAlias(t => t.Members, () => membervalue).Select(() => membervalue);
于 2011-09-22T13:58:46.497 回答