예제 #1
0
        private IQueryable <Advert> ApplyKeywordsCriteria(IQueryable <Advert> query, AdvertPageRequest pageRequest)
        {
            var keywordsArray = pageRequest.SearchKeywords
                                .Split('.', ',', ';', ' ')
                                .Select(w => w.Trim())
                                .Where(w => !string.IsNullOrWhiteSpace(w))
                                .ToArray();

            var result = query;

            if (pageRequest.SearchInDescription)
            {
                foreach (var keyword in keywordsArray)
                {
                    result = result.Where(a => EF.Functions.Like(a.Title + a.Description, $"%{keyword}%"));
                }
            }
            else
            {
                foreach (var keyword in keywordsArray)
                {
                    result = result.Where(a => EF.Functions.Like(a.Title, $"%{keyword}%"));
                }
            }

            return(result);
        }
예제 #2
0
        public IActionResult Search(AdvertPageRequest request)
        {
            request.Role   = User.GetRole();
            request.UserId = User.GetId();
            var result = _db.Adverts.Search(request).Convert(a => _mapper.Map <AdvertExtendedDTO>(a));

            return(Ok(result));
        }
예제 #3
0
        public Page <AdvertExtended> Search(AdvertPageRequest request)
        {
            var result = _table.AsQueryable();

            result = result.Where(a => a.User.RoleId != request.Role);

            if (request.JobCategoriesId != null && request.JobCategoriesId.Count > 0)
            {
                result = result.Where(
                    a => a.JobProposals.Any(jp => request.JobCategoriesId.Contains(jp.JobCategoryId)));
            }

            if (!string.IsNullOrWhiteSpace(request.SearchKeywords))
            {
                result = ApplyKeywordsCriteria(result, request);
            }

            if (request.AdvertSortingOption == AdvertSortingOption.DateAdded)
            {
                result = result.OrderBy(a => a.CreatedDate, request.SortOrder);
            }
            else if (request.AdvertSortingOption == AdvertSortingOption.AccountRating)
            {
                result = result.OrderBy(a => a.User.Rating, request.SortOrder);
            }
            else if (request.AdvertSortingOption == AdvertSortingOption.CompletedContracts)
            {
                result = result.OrderBy(
                    a => a.User.Contracts.Where(c => c.Status == ContractStatus.Completed).Count(),
                    request.SortOrder);
            }

            var total = result.Count();
            var set   = result
                        .Include(a => a.User)
                        .Skip(request.PageIndex * request.PageSize)
                        .Take(request.PageSize)
                        .Select(a => new AdvertExtended
            {
                BaseAdvert = a,
                IsFavorite = a.FavoriteUsers.Any(u => u.UserId == request.UserId)
            })
                        .ToList();

            return(new Page <AdvertExtended>(set, request.PageIndex, request.PageSize, total));
        }