Я проверял два ответа Антона и Бернхардруша и попробовал.
При чтении одного ответа я подумал, что можно переписать мой запрос с помощью внешнего левого соединения и отфильтровать записи с использованием NOT IN.
Это привело меня к этому коду:
SELECT *
FROM MyDB.dbo.Users u
LEFT OUTER JOIN MyDB.dbo.TaggedUsers t ON u.Id=t.TargetId
WHERE t.ShooterId <> '6A17DC45-AB54-4534-B13B-A02001347664'
AND u.Id <> '6A17DC45-AB54-4534-B13B-A02001347664'
OR t.ShooterId is null
Переведено с помощью Criteria API, но, к сожалению, этот код не работает при использовании нескольких пользователей .
В этот момент Я решил работать с кодом вместо SQL .
Таким образом, я сделаю два запроса (выберите всех пользователей и выберите всех помеченных пользователей, соответствующих идентификатору пользователя) с прикрепленным к нему .future и отфильтруйте первый с последним.
Если кто-то знает лучшее решение. Пожалуйста, дайте мне знать.
Возможно, если не поступить в NHibernate позже. Посмотрим. Сейчас я отвечу на этот вопрос своим собственным ответом.