У меня есть следующие две таблицы:
Задания AreaID, JobNo (составной ключ)
Журналы LogID, AreaID, JobNo
Мне нужно получить все задания, с которыми не связаны журналы. В SQL я мог бы сделать:
SELECT Jobs.AreaID,
Jobs.JobNo
FROM Jobs
LEFT JOIN Logs
ON Jobs.AreaID = Logs.AreaID
AND Jobs.JobNo = Logs.JobNo
WHERE Logs.LogID is null
Но я не уверен, как этого добиться с помощью NHibernate. Может ли кто-нибудь предложить какие-либо указатели?
Вот мои отображения:
<class name="Job" table="Jobs">
<composite-key name="Id">
<key-property name="JobNo"/>
<key-many-to-one name="Area" class="Area" column="AreaID"/>
</composite-key>
</class>
<class name="Log" table="Logs">
<id name="Id" column="LogID">
<generator class="identity"/>
</id>
<property name="JobNo"/>
<many-to-one name="Area" class="Area" column="AreaID"/>
</class>
Спасибо
Обновление
ОК, я слегка изменил ответ Носилы, и теперь он делает то, что хотел:
Log logs = null;
return session.QueryOver<Job>()
.Left.JoinAlias(x => x.Logs, () => logs)
.Where(x => logs.Id == null)
.List<Job>();
Я также должен был добавить это в мое отображение работы:
<bag name="Logs">
<key>
<column name="JobNo"></column>
<column name="DivisionID"></column>
</key>
<one-to-many class="Log"/>
</bag>
Спасибо за помощь. :)