public JacketSpecification(JacketFilter filter) { if (filter.SortFields.Count == 0) { Query.OrderByDescending(j => j.ReceivedDate).ThenByDescending(j => j.JacketNumber); } else { Query.OrderBy(filter.SortFields); } if (filter.JacketYear != null && filter.JacketSequence != null) { Query.Where(j => j.JacketYear == filter.JacketYear && filter.JacketSequence == filter.JacketSequence); } if (filter.Defendant != null) { Query.Where(j => j.Defendants.Any(d => d.Name.Contains(filter.Defendant))); } if (filter.Plaintiff != null) { Query.Where(j => j.Plaintiffs.Any(p => p.Name.Contains(filter.Plaintiff))); } if (filter.ReceivedFrom != null) { Query.Where(j => j.ReceivedFrom.Contains(filter.ReceivedFrom)); } }
public async Task <ListResponse> Handle(JacketRequest request, CancellationToken cancellationToken) { var filter = new JacketFilter(request.JacketYear, request.JacketSequence, request.Defendant, request.Plaintiff, request.ReceivedFrom, request.Page, request.PageSize, request.SortFields); var spec = new JacketSpecification(filter); var totalJackets = await _repository.CountAsync(spec, cancellationToken); var pageCount = (int)Math.Ceiling((decimal)totalJackets / request.PageSize); var jackets = await _repository.ListAsync(spec, cancellationToken); var response = new ListResponse(jackets.Select(_mapper.Map <JacketResponse>).ToList(), totalJackets, request.Page, pageCount); return(response); }