public ActionResult GetOptimizedProcedures(int?countryId) { if (countryId == 0) { return(null); } int start = Convert.ToInt32(Request["start"]); int length = Convert.ToInt32(Request["length"]); string searchValue = Request["search[value]"]; string sortColumnName = Request["columns[" + Request["order[0][column]"] + "][name]"]; string sortDirection = Request["order[0][dir]"]; var proceduresDto = _procedureService.GetProceduresOptimized(countryId, searchValue, sortColumnName, sortDirection, start, length, out int totalrows, out int totalrowsafterfiltering); var config = new MapperConfiguration(cfg => cfg.CreateMap <ProcedureDTO, ProcedureViewOptimized>() .ForMember(dest => dest.ProcedureType, opt => opt.MapFrom(c => c.ProcedureType.ToString())) .ForMember(dest => dest.ProductInfo, opt => opt.MapFrom(c => string.Format($"{c.Product.ProductName.Name} {c.Product.ProductCode}"))) .ForMember(dest => dest.Name, opt => opt.MapFrom(c => c.Name)) .ForMember(dest => dest.EstimatedSubmissionDate, opt => opt.MapFrom(c => c.EstimatedSubmissionDate.ToString())) .ForMember(dest => dest.SubmissionDate, opt => opt.MapFrom(c => c.SubmissionDate.ToString())) .ForMember(dest => dest.EstimatedApprovalDate, opt => opt.MapFrom(c => c.EstimatedApprovalDate.ToString())) .ForMember(dest => dest.ApprovalDate, opt => opt.MapFrom(c => c.ApprovalDate.ToString())) .ForMember(dest => dest.Comments, opt => opt.MapFrom(c => c.Comments)) .ForMember(dest => dest.ProductId, opt => opt.MapFrom(c => c.ProductId)) .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id))); var mapper = config.CreateMapper(); var procedures = mapper.Map <List <ProcedureDTO>, List <ProcedureViewOptimized> >(proceduresDto.ToList()); var json = Json(new { data = procedures, draw = Request["draw"], recordsTotal = totalrows, recordsFiltered = totalrowsafterfiltering }, JsonRequestBehavior.AllowGet); return(json); }