Пример #1
0
        public async Task <PagedListDto <AudioDto> > SearchAudiosAsync(SearchAudioFilter filter, CancellationToken ct = default)
        {
            var count = await GetQueryable(filter).CountAsync(ct);

            var results = await GetQueryable(filter)
                          .ProjectTo <AudioDto>(_mapper.ConfigurationProvider)
                          .PaginateAsync(filter.Page, filter.Size, ct);

            return(new PagedListDto <AudioDto>(results, count, filter.Page, filter.Size));
        }
Пример #2
0
        private IQueryable <Audio> GetQueryable(SearchAudioFilter query)
        {
            var parsedTags = !string.IsNullOrWhiteSpace(query.Tags)
                ? query.Tags.Split(',')
                             .Select(t => t.Trim().ToLower())
                             .Where(t => !string.IsNullOrWhiteSpace(t))
                             .ToList()
                : new List <string>();

            var queryable = _dbContext.Audios.AsQueryable();

            if (!string.IsNullOrWhiteSpace(query.Term))
            {
                queryable = queryable.Where(a =>
                                            EF.Functions.Like(a.Title.ToLower(), $"%{query.Term.ToLower()}%"));
            }

            if (parsedTags.Count > 0)
            {
                queryable = queryable.Where(a => a.Tags.Any(x => parsedTags.Contains(x)));
            }

            return(queryable);
        }