예제 #1
0
        public virtual IList <HeadwordSearchResult> GetHeadwordListBySearchCriteria(IEnumerable <string> selectedGuidList,
                                                                                    HeadwordCriteriaQueryCreator creator, int start, int count)
        {
            using (var session = GetSession())
            {
                Book                 bookAlias         = null;
                BookVersion          bookVersionAlias  = null;
                BookHeadword         bookHeadwordAlias = null;
                HeadwordSearchResult resultAlias       = null;

                var result = session.QueryOver(() => bookAlias)
                             .JoinQueryOver(x => x.LastVersion, () => bookVersionAlias)
                             .JoinQueryOver(x => x.BookHeadwords, () => bookHeadwordAlias)
                             .Select(Projections.Distinct(Projections.ProjectionList()
                                                          .Add(Projections.Property(() => bookAlias.Guid).WithAlias(() => resultAlias.BookGuid))
                                                          .Add(Projections.Property(() => bookVersionAlias.VersionId).WithAlias(() => resultAlias.BookVersionId))
                                                          .Add(Projections.Property(() => bookVersionAlias.Title).WithAlias(() => resultAlias.BookTitle))
                                                          .Add(Projections.Property(() => bookVersionAlias.Acronym).WithAlias(() => resultAlias.BookAcronym))
                                                          .Add(Projections.Property(() => bookVersionAlias.SourceAbbreviation).WithAlias(() => resultAlias.SourceAbbreviation))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.DefaultHeadword).WithAlias(() => resultAlias.Headword))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.SortOrder).WithAlias(() => resultAlias.SortOrder))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.XmlEntryId).WithAlias(() => resultAlias.XmlEntryId))
                                                          .Add(Projections.Property(() => bookHeadwordAlias.Image).WithAlias(() => resultAlias.Image))))
                             .WhereRestrictionOn(() => bookAlias.Guid).IsInG(selectedGuidList)
                             .And(creator.GetCondition())
                             .OrderBy(x => x.SortOrder).Asc
                             .TransformUsing(Transformers.AliasToBean <HeadwordSearchResult>())
                             .Skip(start)
                             .Take(count)
                             .List <HeadwordSearchResult>();

                return(result);
            }
        }
예제 #2
0
        public virtual IList <HeadwordSearchResult> SearchHeadwordByCriteriaQuery(SearchCriteriaQueryCreator creator)
        {
            HeadwordSearchResult resultAlias       = null;
            HeadwordItem         headwordItemAlias = null;
            Snapshot             snapshotAlias     = null;
            Project projectAlias = null;

            var headwordRestrictions = creator.GetHeadwordRestrictions();

            var projectIds = SearchProjectIdByCriteriaQuery(creator).Select(x => x.ProjectId);

            var query = GetSession().QueryOver <HeadwordResource>()
                        .JoinAlias(x => x.Snapshots, () => snapshotAlias)
                        .JoinAlias(() => snapshotAlias.Project, () => projectAlias)
                        .Where(x => snapshotAlias.Id == projectAlias.LatestPublishedSnapshot.Id)
                        .AndRestrictionOn(x => projectAlias.Id).IsInG(projectIds);

            if (creator.HasHeadwordRestrictions())
            {
                query.JoinAlias(x => x.HeadwordItems, () => headwordItemAlias)
                .And(headwordRestrictions);
            }

            var result = query
                         .SelectList(list => list
                                     .SelectGroup(x => x.Id).WithAlias(() => resultAlias.Id)
                                     .SelectMin(x => x.Sorting).WithAlias(() => resultAlias.Sorting))
                         .OrderBy(x => x.Sorting).Asc
                         .TransformUsing(Transformers.AliasToBean <HeadwordSearchResult>())
                         .Take(creator.GetCount())
                         .Skip(creator.GetStart())
                         .List <HeadwordSearchResult>();

            return(result);
        }
예제 #3
0
        public virtual IList <HeadwordSearchResult> GetHeadwordList(int start, int count,
                                                                    IList <long> selectedBookIds = null)
        {
            using (var session = GetSession())
            {
                Book                 bookAlias         = null;
                BookVersion          bookVersionAlias  = null;
                BookHeadword         bookHeadwordAlias = null;
                HeadwordSearchResult resultAlias       = null;

                var query = session.QueryOver(() => bookAlias)
                            .JoinQueryOver(x => x.LastVersion, () => bookVersionAlias)
                            .JoinQueryOver(x => x.BookHeadwords, () => bookHeadwordAlias);

                if (selectedBookIds != null)
                {
                    query.WhereRestrictionOn(() => bookAlias.Id).IsInG(selectedBookIds);
                }

                var result = query.Select(Projections.Distinct(Projections.ProjectionList()
                                                               .Add(Projections.Property(() => bookAlias.Guid).WithAlias(() => resultAlias.BookGuid))
                                                               .Add(Projections.Property(() => bookVersionAlias.VersionId).WithAlias(() => resultAlias.BookVersionId))
                                                               .Add(Projections.Property(() => bookVersionAlias.Title).WithAlias(() => resultAlias.BookTitle))
                                                               .Add(Projections.Property(() => bookVersionAlias.Acronym).WithAlias(() => resultAlias.BookAcronym))
                                                               .Add(Projections.Property(() => bookVersionAlias.SourceAbbreviation).WithAlias(() => resultAlias.SourceAbbreviation))
                                                               .Add(Projections.Property(() => bookHeadwordAlias.DefaultHeadword).WithAlias(() => resultAlias.Headword))
                                                               .Add(Projections.Property(() => bookHeadwordAlias.XmlEntryId).WithAlias(() => resultAlias.XmlEntryId))
                                                               .Add(Projections.Property(() => bookHeadwordAlias.SortOrder).WithAlias(() => resultAlias.SortOrder))
                                                               .Add(Projections.Property(() => bookHeadwordAlias.Image).WithAlias(() => resultAlias.Image))))
                             .OrderBy(x => x.SortOrder).Asc
                             .TransformUsing(Transformers.AliasToBean <HeadwordSearchResult>())
                             .Skip(start)
                             .Take(count)
                             .List <HeadwordSearchResult>();

                return(result);
            }
        }