Я нашел несколько ресурсов в сети, но на самом деле не смог разобраться с этим
В основном у меня есть запрос, в котором есть два оставшихся внешних соединения
var query = session.QueryOver<NewsPost>(() => newsPostAlias)
.Left.JoinQueryOver(x => newsPostAlias.PostedBy, () => userAlias)
.Left.JoinQueryOver(x => newsPostAlias.Category, () => categoryAlias)
.Fetch(x => x.PostedBy).Eager
.Fetch(x => x.Category).Eager
.Where(x => !x.Deleted);
Это может быть неправильный способ сделать это, но, похоже, он не сломается. Теперь я хочу, чтобы на двух таблицах, которые оставили внешние соединения, я хочу убедиться, что столбец Удалено в обеих этих таблицах равен false.
Однако всякий раз, когда я добавляю это ограничение, результаты возвращаются только тогда, когда столбец внешнего ключа в новостной ленте заполнен, но так как это можно обнулять, и почему я сделал это левосторонним присоединением, это нежелательно.
Каков лучший способ сделать это
.Where(x => !x.Deleted && !x.PostedBy.Deleted && !x.Category.Deleted);
Я изучал мультизапросы, фьючерсы и дизъюнкции, я не уверен, какой подход следует использовать, очевидно, я могу придумать несколько способов (плохих способов, которые подсказывает мне мой инстинкт), но что является правильным? :)
Спасибо
РЕДАКТИРОВАТЬ - Модификация принятого ответа
return session.QueryOver(() => newsPostAlias)
.Fetch(x => x.PostedBy).Eager
.Fetch(x => x.Category).Eager
.Left.JoinQueryOver(() => newsPostAlias.PostedBy, () => postedByAlias)
.Left.JoinQueryOver(() => newsPostAlias.Category, () => categoryAlias)
.Where(() => !newsPostAlias.Deleted)
.And(() => newsPostAlias.PostedBy == null || !postedByAlias.Deleted)
.And(() => newsPostAlias.Category == null || !categoryAlias.Deleted)
.OrderBy(() => newsPostAlias.PostedDate).Desc
.Take(10)
.List();