public JsonResult GetUserCategoryList(DataTableViewModel dataTableViewModel) { string SearchLevel1Str = Request.QueryString["SearchLevel1"]; int? SearchLevel1 = !string.IsNullOrEmpty(SearchLevel1Str) ? int.Parse(SearchLevel1Str) as int? : null; string SearchLevel2Str = Request.QueryString["SearchLevel2"]; int? SearchLevel2 = !string.IsNullOrEmpty(SearchLevel2Str) ? int.Parse(SearchLevel2Str) as int? : null; string SearchLevel3Str = Request.QueryString["SearchLevel3"]; int? SearchLevel3 = !string.IsNullOrEmpty(SearchLevel3Str) ? int.Parse(SearchLevel3Str) as int? : null; string SearchLevel4Str = Request.QueryString["SearchLevel4"]; int? SearchLevel4 = !string.IsNullOrEmpty(SearchLevel4Str) ? int.Parse(SearchLevel4Str) as int? : null; string SearchName = Request.QueryString["SearchName"]; var includeMultiProperties = new Expression <Func <ACT.Models.UserCategory, object> >[] { x => x.Level2, y => y.Level1, z => z.Level3, t => t.Level4 }; var data = _UserCategoryService.ListWithPaging( filter: x => (SearchLevel1 == null || x.Level1Id == SearchLevel1) && (SearchLevel2 == null || x.Level2Id == SearchLevel2) && (SearchLevel3 == null || x.Level3Id == SearchLevel3) && (SearchLevel4 == null || x.Level4Id == SearchLevel4) && x.Name.Contains(SearchName), includeProperties: includeMultiProperties, orderBy: o => o.DisplayOrder, pageSize: dataTableViewModel.length, page: dataTableViewModel.start); //fix serilaize json >> var dataMapped = Mapper.Map <List <UserCategoryViewModel> >(data.EntityData); return(Json(new { data = dataMapped, recordsTotal = data.Count, recordsFiltered = data.Count }, JsonRequestBehavior.AllowGet)); }