Ограничение на сбор с дизъюнкцией с использованием NHibernate QueryOver - PullRequest
5 голосов
/ 10 марта 2012

Привет всем NHibernate гуру!

Учитывая эти два класса:

public class User {
    long Id;
    string Name;
}

public class Project {
    long Id;
    User Owner;
    IList<User> Managers;
    ...
}

Я хотел бы сделать запрос , используя QueryOver (без использования псевдонимов критериев "волшебная строка"), чтобы получить все проекты, имеющие user1 в качестве владельца ИЛИ в качестве одного из менеджеров.

Я умею отдельно:

  • получить проекты с пользователем user1 в качестве владельца: session.QueryOver <> Project >> (). Где (p => p.Owner == user1)
  • получить в качестве менеджера: session.QueryOver <> (). JoinAlias ​​(p => p.Managers, () => manager) .Where (() => manager == user1)

но Я не знаю, как написать дизъюнкцию .

Если бы у кого-то была идея, это бы мне очень помогло.

Заранее спасибо,

Chris

1 Ответ

2 голосов
/ 10 марта 2012

Что-то вроде: -

User manager = null;

var query = session
    .QueryOver<Project>()
    .JoinAlias(j => j.Managers, () => manager)
    .Where(w => manager.Name == user1 || w.Owner == user1)
    .List<Project>();

изменить , чтобы изменить фильтр с Name на Id (как указано в ОП): -

.Where(w=>manager.Id == user1.Id || w.Owner.Id == user1.Id)

edit2 для изменения внутреннего на левое использование

.JoinAlias(j => j.Managers, () => manager).left
...