我想选择给定经理未完成的所有请求。一个经理可以有多个团队。
我根据权限编写应用各种限制的查询,并更改查询以提供行数、存在检查、子查询等。
该组合使用 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,因为我不能再将它与基于权限的其他限制组合起来。我也无法将其与其他查询组合以将其转换为行计数/存在检查等。