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); }
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)); }