示例#1
0
        public FilmSearchResponse Search(FilmSearchRequest request)
        {
            var response = new FilmSearchResponse();

            Film result = null;

            en.Film     filmAlias             = null;
            en.Language languageAlias         = null;
            en.Language originalLanguageAlias = null;

            var queryOver =
                _session.QueryOver <en.Film>(() => filmAlias)
                .JoinAlias(la => la.Language, () => languageAlias)
                .JoinAlias(la => la.OriginalLanguage,
                           () => originalLanguageAlias,
                           nh.SqlCommand.JoinType.LeftOuterJoin);

            if (!string.IsNullOrWhiteSpace(request.Title))
            {
                queryOver.WhereRestrictionOn(c => c.Title)
                .IsInsensitiveLike(request.Title, nh.Criterion.MatchMode.Anywhere);
            }

            var rowCountQuery =
                queryOver.Clone()
                .ToRowCountQuery()
                .FutureValue <int>();

            response.Items =
                queryOver
                .SelectList(list => list
                            .Select(() => filmAlias.Id).WithAlias(() => result.Id)
                            .Select(() => filmAlias.Title).WithAlias(() => result.Title)
                            .Select(() => filmAlias.ReleaseYear).WithAlias(() => result.ReleaseYear)
                            .Select(() => filmAlias.RentalDuration).WithAlias(() => result.RentalDuration)
                            .Select(() => filmAlias.Length).WithAlias(() => result.Length)
                            .Select(() => languageAlias.Name).WithAlias(() => result.Language)
                            .Select(() => originalLanguageAlias.Name).WithAlias(() => result.OriginalLanguage)
                            .Select(() => filmAlias.RentalRate).WithAlias(() => result.RentalRate)
                            .Select(() => filmAlias.Rating).WithAlias(() => result.Rating)
                            .Select(() => filmAlias.Description).WithAlias(() => result.Description)
                            .Select(() => filmAlias.LastUpdate).WithAlias(() => result.LastUpdate)
                            .Select(() => filmAlias.ReleaseYear).WithAlias(() => result.ReleaseYear)
                            .Select(() => filmAlias.ReplacementCost).WithAlias(() => result.ReplacementCost)
                            .Select(() => filmAlias.SpecialFeatures).WithAlias(() => result.SpecialFeatures)
                            )
                .TransformUsing(Transformers.AliasToBean <Film>())
                .Skip((request.PageNumber - 1) * request.ItemsPerPage)
                .Take(request.ItemsPerPage)
                .List <Film>();

            response.TotalItems = rowCountQuery.Value;

            return(response);
        }
示例#2
0
        public static IEnumerable <RemoteSearchResult> ToRemoteSearchResults(this FilmSearchResponse src, ILogger logger)
        {
            if (src?.Films is null)
            {
                return(Enumerable.Empty <RemoteSearchResult>());
            }

            return(src.Films
                   .Select(s => s.ToRemoteSearchResult(logger))
                   .Where(s => s != null));
        }