Я знаю, что этот пост старый, но я только что столкнулся с той же проблемой и подумал, что поделюсь ответом, который мне показался намного более простым.
Независимо от того, что - NHibernate должен будет запросить несколько строк для каждого родительского объекта (если вы не используете SubSelect вместо Join). Из-за этого мы знаем, что получим список, скажем, 500 объектов, тогда как на самом деле есть только 100 уникальных объектов.
Поскольку эти объекты уже запрошены и уже находятся в памяти - почему бы не использовать LINQ?
Исходя из этого вопроса: LINQ's Distinct () для определенного свойства ответ с большинством + дает очень красноречивое решение. Создайте другой список и попросите LINQ провести четкое сравнение. Если бы мы могли сделать что-то особенное в базе данных, это, безусловно, было бы лучшим вариантом, но поскольку это не вариант, LINQ, похоже, является хорошим решением.