示例#1
0
        /// <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);
        }