public ActionResult GetAllKPIValueDetail() { try { var kpiValueCache = _unitKpiValueService.GetManay(r => r.SD_ID == ProjectProvider.Instance.Current.SD_ID).ToList(); //表头 var kpis = _kpiService.GetManayByOrder(r => r.SD_ID == ProjectProvider.Instance.Current.SD_ID && r.VALUE_TABLE_ID == 1, m => m.ORDER_NO); Dictionary <Tuple <string, int>, object> temp = new Dictionary <Tuple <string, int>, object>(); kpis.ForEach(r => { temp.Add(new Tuple <string, int>($"[{r.SD_EKPI_CODE}]{ r.SD_EKPI_NAME}", r.SD_EKPI_ID), $"[{r.SD_EKPI_CODE}]{ r.SD_EKPI_NAME}"); }); dynamic title_code = new ExpandoObject(); ((IDictionary <string, object>)title_code).Add("PNO", "PNO"); foreach (KeyValuePair <Tuple <string, int>, object> item in temp) { ((IDictionary <string, object>)title_code).Add(item.Key.Item1, item.Value); } //数据体 var pageData = new List <dynamic>(); var cpats = _unitCpatDetailService.GetManay(r => r.SD_ID == ProjectProvider.Instance.Current.SD_ID && r.IN_FLAG == "I"); cpats.ForEach( r => { dynamic value = new ExpandoObject(); value.PNO = r.PATIENT_NO; foreach (KeyValuePair <Tuple <string, int>, object> item in temp) { ((IDictionary <string, object>)value).Add(item.Key.Item1, kpiValueCache.FirstOrDefault(v => v.SD_CPAT_NO == r.SD_CPAT_NO && v.SD_EKPI_ID == item.Key.Item2)?.INDEX_VALUE.ToString()); } pageData.Add(value); } ); var data = new Dictionary <string, List <dynamic> >(); data.Add("title", new List <dynamic>() { title_code }); data.Add("data", pageData); return(Content(pageData.ToJson())); } catch (Exception e) { return(Error(e.ToString())); } }