public virtual IList <TermCountResult> GetBooksTermResultsCount(List <string> bookGuidList,
                                                                        TermCriteriaQueryCreator queryCreator)
        {
            using (var session = GetSession())
            {
                Book            bookAlias        = null;
                BookVersion     bookVersionAlias = null;
                BookPage        bookPageAlias    = null;
                Term            termAlias        = null;
                TermCountResult termResultAlias  = null;

                var result = session.QueryOver(() => bookAlias)
                             .JoinQueryOver(x => x.LastVersion, () => bookVersionAlias)
                             .JoinQueryOver(x => x.BookPages, () => bookPageAlias)
                             .JoinQueryOver(x => x.Terms, () => termAlias)
                             .Select(Projections.ProjectionList()
                                     .Add(Projections.Group(() => bookAlias.Id).WithAlias(() => termResultAlias.BookId))
                                     .Add(
                                         Projections.CountDistinct(() => bookPageAlias.Id)
                                         .WithAlias(() => termResultAlias.PagesCount))
                                     )
                             .WhereRestrictionOn(() => bookAlias.Guid).IsInG(bookGuidList)
                             .And(queryCreator.GetCondition())
                             .TransformUsing(Transformers.AliasToBean <TermCountResult>())
                             .List <TermCountResult>();

                return(result);
            }
        }
        public virtual IList <TermResult> GetBooksTermResults(List <string> bookGuidList,
                                                              TermCriteriaQueryCreator queryCreator)
        {
            using (var session = GetSession())
            {
                Book        bookAlias        = null;
                BookVersion bookVersionAlias = null;
                BookPage    bookPageAlias    = null;
                Term        termAlias        = null;
                TermResult  termResultAlias  = null;

                var result = session.QueryOver(() => bookAlias)
                             .JoinQueryOver(x => x.LastVersion, () => bookVersionAlias)
                             .JoinQueryOver(x => x.BookPages, () => bookPageAlias)
                             .JoinQueryOver(x => x.Terms, () => termAlias)
                             .SelectList(list => list
                                         .Select(() => bookAlias.Id).WithAlias(() => termResultAlias.BookId)
                                         .Select(() => bookPageAlias.Text).WithAlias(() => termResultAlias.PageName)
                                         .Select(() => bookPageAlias.XmlId).WithAlias(() => termResultAlias.PageXmlId))
                             .OrderBy(() => bookAlias.Id).Asc
                             .OrderBy(() => bookPageAlias.Position).Asc
                             .WhereRestrictionOn(() => bookAlias.Guid).IsInG(bookGuidList)
                             .And(queryCreator.GetCondition())
                             .TransformUsing(Transformers.AliasToBean <TermResult>())
                             .List <TermResult>();

                return(result);
            }
        }