Я потратил много времени, проверяя все виды постов, которые не делали то, что мне нужно, и ваш пост ближе всего к тому, что я искал.
Из моих тестов (с nHibernate 3) ваш запрос неверен. На самом деле ваши критерии больше похожи на это в SQL:
SELECT *
FROM [Posts] p
LEFT JOIN [PostInteractions] i
ON p.PostId = i.PostID_TargetPost
WHERE (i.UserID_ActingUser = 202 OR i.UserID_ActingUser IS NULL)
, который возвращает сообщения / взаимодействия только в том случае, если ActingUser взаимодействия равен 202 или если для сообщения не существует взаимодействия.
После гораздо большего количества испытаний я наконец понял это ...
Попробуйте это (vb.net):
session.CreateCriteria(Of Posts)("p") _
.CreateCriteria("Interactions", "i", _
NHibernate.SqlCommand.JoinType.LeftOuterJoin, _
Expression.Eq("i.ActingUser", user))
Существует перегрузка функции CreateCriteria с использованием withClause. Это отлично сработало для меня, и я верю, что это то, что вы тоже ищете.
Я знаю, что тема довольно старая, но может ли она помочь кому-то еще ...
Кроме того, за отличные примеры запросов nHibernate (это мне очень помогло): http://ayende.com/blog/4023/nhibernate-queries-examples
Веселись!