public IHttpActionResult SearchJob(JobFilteringViewModel jobFilteringVM, int pageNo) { if (!ModelState.IsValid) { return(Ok(new { Error = "Invalid ModelState" })); } try { int count = 0; var jobs = jobService.SearchJobs( jobFilteringVM, Pagination.Size * pageNo, Pagination.Size, out count ); return(Ok(new { Success = jobs, Count = count })); } catch (Exception ex) { return(Ok(new { Error = ex.Message })); } }
public List <JobViewModel> SearchJobs(JobFilteringViewModel jobFilteringVM, int skip, int take, out int count) { var query = _db.Jobs.AsQueryable <Job>().AsQueryable(); // filter by industry type if (!string.IsNullOrEmpty(jobFilteringVM.Industry)) { query = (from j in query.Where(x => x.Industry.ToLower().Contains(jobFilteringVM.Industry.ToLower())) select j).AsQueryable(); } //filter by insolvency //if (jobFilteringVM.InsolvencyID > 0) //{ // query = (from j in query.Where(x => job.InsolvencyID == jobFilteringVM.InsolvencyID) // select j).AsQueryable(); //} // is full time job if (jobFilteringVM.IsFullTime) { query = (from j in query.Where(x => x.IsFullTime == true) select j).AsQueryable(); } if (jobFilteringVM.IsPartTime) { query = (from j in query.Where(x => x.IsPartTime == true) select j).AsQueryable(); } // is permanent job if (jobFilteringVM.IsPermanent) { query = (from j in query.Where(x => x.IsPermanent == true) select j).AsQueryable(); } if (jobFilteringVM.IsTemporary) { query = (from j in query.Where(x => x.IsTemporary == true) select j).AsQueryable(); } // is remote job if (jobFilteringVM.IsRemote) { query = (from j in query.Where(x => x.IsRemote == true) select j).AsQueryable(); } if (jobFilteringVM.IsLocal) { query = (from j in query.Where(x => x.IsLocal == true) select j).AsQueryable(); } //filter by locations if (jobFilteringVM.LocationList != null && jobFilteringVM.LocationList.Count > 0) { query = (from j in query.Where(x => jobFilteringVM.LocationList.Contains(x.LocationList[0])) select j).AsQueryable(); } if (jobFilteringVM.SalaryFrom != 0 && jobFilteringVM.SalaryTo != 0) { query = (from j in query.Where(x => (x.SalaryFrom >= jobFilteringVM.SalaryFrom && x.SalaryFrom < jobFilteringVM.SalaryTo) && (x.SalaryTo <= jobFilteringVM.SalaryTo && x.SalaryTo > jobFilteringVM.SalaryFrom) ) select j).AsQueryable(); } // experience and position if (jobFilteringVM.PositionList.Count > 0) { //List<string> posList = (from j in query select j.Position.ToLower()).ToList(); // List<string> positionlist = jobFilteringVM.PositionList.ConvertAll(x => x.ToLower()); //query = (from j in query.Where(x => positionlist.Contains(x.Position.ToLower())) select j).AsQueryable(); query = (from j in query.Where(x => jobFilteringVM.PositionList.Contains(x.Position)) select j).AsQueryable(); //query = (from j in query.Where(x => jobFilteringVM.PositionList.Contains(x.Position.ToLower())) select j).AsQueryable(); //query = (from j in query.Where(x => jobFilteringVM.PositionList.ConvertAll(m => m.ToLower()).Contains(x.Position.ToLower())) select j).AsQueryable(); } count = query.ToList().Count(); var result = (from j in query.Skip(skip).Take(take) select new JobViewModel { Industry = j.Industry, InsolvencyID = j.InsolvencyID, EmployerID = j.EmployerID, SalaryFrom = j.SalaryFrom, SalaryTo = j.SalaryTo, IsFullTime = j.IsFullTime, IsPermanent = j.IsPermanent, IsRemote = j.IsRemote, LocationList = j.LocationList, Description = j.Description, Position = j.Position, YearOfExperience = j.YearOfExperience, _id = j._id } ).ToList(); return(result); }