我想选择给定经理的所有未完成的请求。经理可以拥有多个团队。
我根据权限编写应用各种限制的查询,并更改查询以提供行计数,存在检查,子查询等。
组合使用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,因为我无法使用基于权限的其他限制来构建它。我也无法将其与其他查询组合在一起,将其转换为行计数/存在检查等。
答案 0 :(得分:1)
我看到你改变了模型,但这就是
var users = QueryOver.Of<Team> ();
users.TeamsForManager (5);
users.JoinAlias(t => t.Members, () => membervalue).Select(() => membervalue);