У меня была проблема с этим. Во-первых, Distinct работает, но только после вызова метода QueryOver.List.ToList (), так что query.skip не будет работать должным образом, просматривая дубликаты, создавая список, а затем уменьшая количество разбитых страниц из-за дубликатов .
Самым простым, что я нашел, было сделать ... просто сначала создать список уникальных идентификаторов, а затем выполнить пагинацию самих идентификаторов.
Тогда в вашем наборе результатов вы можете просто выполнить Id и получить идентификаторы только в вашем недавно разбитом на страницы идентификаторе.
//Create your query as usual.. apply criteria.. do what ever you want.
//Get a unique set of ids from the result set.
var idList = query.
.Select(x => x.Id)
.List<long>().Distinct().ToList();
//Do your pagination here over those ids
List<long> pagedIds = idList.Skip(0).Take(10).ToList();
//Here what used to be non distinct resultset, now is..
List<T> resultquery.Where(() =>
item.Id.IsIn(pagedIds))
.List<Person>()
.ToList();
Особая благодарность .. https://julianjelfs.wordpress.com/2009/04/03/nhibernate-removing-duplicates-combined-with-paging/