.JoinQueryOver(effort => effort.AdType)
вернет QueryOver с подтипом, здесь AdType
IQueryOver<Effort, Adtype>
вместо исходного IQueryOver<Effort, Effort>
.Первый общий аргумент - queryType , а второй - тип, с которым работают методы.Если вы клонируете весь запрос, он копируется и возвращается как базовый запрос IQueryOver<Effort, Effort>
.
Для предотвращения переключения QueryOver на подтип существует JoinAlias, который создает псевдоним вместо убывания.
AdType adAlias = null;
ListType listAlias = null;
return NHibernateSession.QueryOver<Effort>()
.JoinAlias(effort => effort.AdType, () => adAlias)
.JoinAlias(effort => effort.List, () => listAlias)
.WhereRestrictionOn(() => adAlias.Id).IsIn(adTypes.Cast<long>().ToList())
.WhereRestrictionOn(() => listAlias.Id).IsIn(specialLists.Cast<long>().ToList())
.List<Effort>();
не то, что если вы ограничиваете только Id типа adtype и listtype, тогда
return NHibernateSession.QueryOver<Effort>()
.WhereRestrictionOn(effort => effort.Adtype.Id).IsIn(adTypes.Cast<long>().ToList())
.WhereRestrictionOn(effort => effort.List.Id).IsIn(specialLists.Cast<long>().ToList())
.List<Effort>();