public virtual List <ChartDataEntity> GetDataOfChartForXY(DateTime start, DateTime end, int?sourceType)
        {
            var query = GetDataSource(start, end);

            IQueryable <ChartItemEntity> items = LogicDataSourceForXY(query, start, end, sourceType);

            List <ChartDataEntity> datas = new List <ChartDataEntity>();

            foreach (var item in items)
            {
                var entity = (from x in datas
                              where x.name == item.Name
                              select x).FirstOrDefault();

                if (entity == null)
                {
                    ChartDataEntity data = new ChartDataEntity();
                    data.name = item.Name;
                    data.data.Add(item.Data ?? 0);
                    datas.Add(data);
                }
                else
                {
                    entity.data.Add(item.Data ?? 0);
                }
            }

            return(datas);
        }
Beispiel #2
0
        public List <ChartDataEntity> GetChartMessage(string username, DateTime start, DateTime end)
        {
            var account = (from x in this.DB.Set <WxAccountEntity>()
                           where x.UserName == username
                           select x).First();

            DateTime endTime = end.AddDays(1);

            var query = from y in
                        (
                (from x in this.DB.Set <WxTextEntity>()
                 where x.ToUserName == account.WeiXinNo &&
                 x.RecieveTime >= start &&
                 x.RecieveTime < endTime
                 select new { Type = "文本", x.RecieveTime, x.ID })
                .Union(from x in this.DB.Set <WxImageEntity>()
                       where x.ToUserName == account.WeiXinNo &&
                       x.RecieveTime >= start &&
                       x.RecieveTime < endTime
                       select new { Type = "图片", x.RecieveTime, x.ID })
                .Union(from x in this.DB.Set <WxRecognitionEntity>()
                       where x.ToUserName == account.WeiXinNo &&
                       x.RecieveTime >= start &&
                       x.RecieveTime < endTime
                       select new { Type = "语音", x.RecieveTime, x.ID })
                        )
                        group y by new
            {
                y.Type,
                Year  = SqlFunctions.DateName("yyyy", y.RecieveTime),
                Month = SqlFunctions.DateName("MM", y.RecieveTime),
                Day   = SqlFunctions.DateName("d", y.RecieveTime),
            } into g
                select new
            {
                DateTime = g.Key.Year + "-" + g.Key.Month + "-" + g.Key.Day,
                Name     = g.Key.Type,
                Data     = g.Count()
            };

            var list = new List <ChartItemEntity>();

            string[] sites = new string[] { "文本", "图片", "语音" };

            //获取日期列表
            var      dir  = new Dictionary <string, int>();
            DateTime temp = start;

            while (temp <= end)
            {
                dir.Add(temp.ToString("yyyy-MM-d"), 0);
                temp = temp.AddDays(1);
            }

            //包含名称的dict
            var dirDate = sites.ToDictionary(x => x,
                                             x => (Dictionary <string, int>)CloneCommonHelper.Clone(dir));

            foreach (var item in query)
            {
                dirDate[item.Name][item.DateTime] = item.Data;
            }

            list.AddRange(dirDate.SelectMany(keyValuePair => keyValuePair.Value,
                                             (keyValuePair, kv) => new ChartItemEntity {
                Name = keyValuePair.Key, Data = kv.Value
            }));

            List <ChartDataEntity> datas = new List <ChartDataEntity>();

            foreach (var item in list)
            {
                var entity = (from x in datas
                              where x.name == item.Name
                              select x).FirstOrDefault();

                if (entity == null)
                {
                    ChartDataEntity data = new ChartDataEntity();
                    data.name = item.Name;
                    data.data.Add(item.Data ?? 0);
                    datas.Add(data);
                }
                else
                {
                    entity.data.Add(item.Data ?? 0);
                }
            }

            return(datas);
        }