/// <summary> /// 获取数据库统计数据 /// </summary> /// <param name="dataSource">数据源</param> /// <param name="groupColumn">分组的列</param> /// <param name="searchEntris">查询的配置项</param> /// <returns></returns> public static List <DynamicModel> GetDbStatisData(this IQueryable dataSource, string groupColumn, SearchEntry[] searchEntris) { if (searchEntris.Count() == 0) { throw new Exception("请输入至少一个查询配置项"); } StringBuilder selectStr = new StringBuilder(); selectStr.Append("new (it.Key as Key"); int count = searchEntris.Count(); searchEntris.ForEach((item, index) => { string end = ""; if (index == count - 1) { end = ")"; } selectStr.Append($",{item.FuncName}(it.{item.StatisColoum}) as {item.ResultName}{end}"); }); List <DynamicModel> resData = new List <DynamicModel>(); var q = dataSource.GroupBy(groupColumn, "it") .Select(selectStr.ToString()) .CastToList <dynamic>(); foreach (dynamic aData in q) { DynamicModel newData = new DynamicModel(); resData.Add(newData); object obj = (object)aData; Type type = obj.GetType(); newData.AddProperty("Key", type.GetProperty("Key").GetValue(obj)); searchEntris.ForEach(item => { newData.AddProperty(item.ResultName, type.GetProperty(item.ResultName).GetValue(obj)); }); } return(resData); }