public IActionResult Cates(AssetSearchParam param) { InitUi(param); //param.IsContainSubDept = true; //var list = _service.GetCateGroup(param); //return View(list); var sData = _reportService.CateSummary(); var cates = AssetCateUtil.All(); //var data = from d in sData // join cate in cates on d.Id equals cate.Id into dds // from dd in dds.DefaultIfEmpty() // select new StringSummaryDto() // { // Property = ShowName(dd.Name, dd.Level), // Num = d.Num // }; var data = from cate in cates join dto in sData on cate.Id equals dto.Id into dds from dd in dds.DefaultIfEmpty() select new StringSummaryDto() { Property = ShowName2(cate.Name, cate.Level), Num = dd?.Num ?? 0 }; return(View("Cate2", data.ToList())); }