1、ef方法
public Dictionary<string, string> GetTotalDataByYearAndMonth(int year) { // 先进行数据查询,返回数据 var query = _repAgent.AsQueryable(); //查询该年份的数据 if (year > 0) { query = query.Where(u => u.RegisterTime.Year== year); } //分组 var list = query.GroupBy(u => SqlFunctions.DateName("yyyy", u.RegisterTime) + SqlFunctions.DateName("MM", u.RegisterTime)).Select(g => (new { month = g.Key, count = g.Count() })); if (list == null) return null; Dictionary<string, string> dics = new Dictionary<string, string>(); foreach (var item in list) { var month_one = item.month.Substring(item.month.Length - 2, 2); var month_two = item.month.Substring(item.month.Length - 1, 1); if (month_one.Contains("0") && month_two != "0") { dics.Add("{name:'" + month_two + "月'", "value:" + item.count.ToString() + "},"); } else { dics.Add("{name:'" + month_one + "月'", "value:" + item.count.ToString() + "},"); } } //补全没有的月份 for (var i = 1; i <= 12; i++) { string no_month = "{name:'" + i.ToString() + "月'"; if (!dics.Keys.Contains(no_month)) { dics.Add(no_month, "value:0},"); } } Dictionary<string, string> dist = dics.OrderBy(o => Convert.ToInt32(o.Key.Replace("{name:'", "").Replace("月'", ""))).ToDictionary(o => o.Key, o => o.Value); return dist; }
2、控制器
[HttpGet] public ActionResult Statistics(int year = 2017) { Dictionary<string, string> dist = _svcAgent.GetTotalDataByYearAndMonth(year); ViewBag.dist = dist; ViewBag.year = year; return View(); }
3、页面
@{ ViewBag.Title = "数据统计"; this.SetSelectedMenuItem("dZGAgentStatis"); Layout = "~/Views/Shared/backoffice/_admin_layout_main.cshtml"; var yearList = new List<SelectListItem>(); int yearIndex = ViewBag.year ?? System.DateTime.Now.Year; for (var i = 2016; i < 2030; i++) { var newitem = new SelectListItem(); newitem.Text = i.ToString(); newitem.Value = i.ToString(); newitem.Selected = newitem.Value == yearIndex.ToString(); yearList.Add(newitem); } var title_text = ViewBag.year + "某站点用户访问来源"; var symbol = ","; } @section SecHeader{ <script src="/Res/libs/Echarts/echarts.js" type="text/javascript"></script> <script type="text/javascript"> var curUrl = '@Url.Action("Statistics")'; $(function () { $("#syear").change(function () { doSearch(); }); }); var doSearch = function () { PopDialog.showTip('正在加载数据……'); var query = []; adminUtility.pushTextValue(query, 'syear', 'year'); if (query.length > 0) { curUrl += '?' + query.join('&'); } delete query; query = null; window.location = curUrl; }; </script> } <div class="manaToolPanel clearfix"> <div class="panel clearfix" style="margin-top: 5px;"> <table cellpadding="2" cellspacing="0"> <tr> <td> 年份: </td> <td>@Html.DropDownList("syear", yearList, new { @class = "input-select mr10" }) </td> </tr> </table> </div> </div> <div id="main" style="width: 800px; height: 600px; margin: 50px auto;"> </div> <script type="text/javascript"> // 基于准备好的dom,初始化echarts实例 var myChart = echarts.init(document.getElementById('main')); //var B_myChart = echarts.init(document.getElementById('B_main')); myChart.showLoading(); option = { title: { text: '@title_text', subtext: '纯属虚构', x: 'center' }, tooltip: { trigger: 'item', formatter: "{a} <br/>{b} : {c} ({d}%)" }, legend: { orient: 'vertical', left: 'left', data: ['1月', '2月', '3月', '4月', '5月','6月', '7月', '8月', '9月', '10月','11月','12月'] }, color:['#6f0880', '#fc7113','#1ced16','#3405fe','#e675f6','#b6b6b6','#5ea5fc','#8c6e8f','#30252b','#19dce3','#dd3c97','#ce04ef'], series: [ { name: '访问数据', type: 'pie', radius: '55%', center: ['50%', '60%'], data: [ @foreach(var item in ViewBag.dist) { @Html.Raw(item.Key) @symbol @Html.Raw(item.Value) } ], itemStyle: { emphasis: { shadowBlur: 10, shadowOffsetX: 0, shadowColor: 'rgba(0, 0, 0, 0.5)' } } } ], roseType: 'angle' }; // 使用刚指定的配置项和数据显示图表。 myChart.setOption(option); myChart.hideLoading(); </script>