NHibernate проецирует коллекцию элементов - PullRequest
2 голосов
/ 21 сентября 2011

Я хочу выбрать все запросы, ожидающие выполнения для данного менеджера. Менеджер может иметь несколько команд.

Я составляю запросы, применяя различные ограничения на основе разрешений, и изменяю запросы, чтобы обеспечить количество строк, проверки существования, подзапросы и т. Д.

Композиция использует 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 Ответ

1 голос
/ 22 сентября 2011

я видел, как вы сменили модель, но это было бы так

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