NHibernate QueryOver с левыми соединениями

Это заняло у меня несколько дней, и я надеюсь, что кто-то из гуру NHibernate сможет мне помочь. У меня настроен запрос, который работает в SQL Server, и я хочу получить то же самое в NHibernate. Но все мои попытки (я много гуглил и просматривал в stackru) пока не увенчались успехом. Вот запрос:

Select
  j.id,
  j.title,
  j.company,
  jt.name as category,
  loc.city,
  je.is_assigned,
FROM job j
  LEFT JOIN location loc ON loc.id = j.location
  LEFT JOIN job_tag jt ON jt.job = j.id
    and jt.name in (SELECT name FROM tag WHERE tag_category=''Jobtype'')
  LEFT JOIN job_employee je ON je.job = j.id
    and je.employee_uid = <string>

Я бы предпочел использовать QueryOver, но был бы рад получить рекомендации от вас, ребята!

РЕДАКТИРОВАТЬ: То, что у меня есть, довольно просто...

JobEmployee jobEmployee = null;
Location loc = null;
JobTag jobTag = null;

session.QueryOver<Job>()
  .JoinAlias(x => x.location, () => loc)
  .JoinAlias(x => x.tags, () => jobTag, JoinType.LeftOuterJoin,
     Restrictions.On(jobTag.name).IsIn(<subquery>))
  .List();

Но есть ошибки типа "делегат.... не принимает 1 аргумент".

С наилучшими пожеланиями, Мартин

1 ответ

Решение

Вот черновик решения... Сначала подзапрос:

var subquery = QueryOver
    .Of<Tag>()
    .Where(t => t.TagCategory == "Jobtype")
    .Select(t => t.Name);

А теперь мы будем использовать подзапрос в withClause:

JobEmployee jobEmployee = null;
Location loc = null;
JobTag jobTag = null;

var list = session
  .QueryOver<Job>()
  .JoinAlias(x => x.location, () => loc)
  .JoinAlias(x => x.tags, () => jobTag, JoinType.LeftOuterJoin,

  // instead of this
  // Restrictions.On(jobTag.name).IsIn(<subquery>))

  // use this
    Subqueries.WhereProperty(() => jobTag.name).In(subquery)
  )
  .List();

Итак, мы отфильтровали JOIN, используя withClause и Subqueries

Другие вопросы по тегам