关于MVC和ECharts的一个问题

.Net技术 码拜 9年前 (2016-02-23) 1437次浏览
本人就是想让柱状图获取的是表内区间的全部数量,例如100-200之间有多少个,就是0-30   31-90  91-180  181-365  365以上,这5个。关于MVC和ECharts的一个问题,这是要获取的表内容。
关于MVC和ECharts的一个问题
怎样才可以让这5个柱子分别代表0-30   31-90  91-180  181-365  365以上,的各个数量。现在的柱子是全部的。并没有区间。
底下是代码,求怎么改,

 public LineChartDataModel<int> GetUkeyChart()
        {
            using (var DbContext = new CRBFoundationDbContext())
            {
                var rankSize = 5;
                
                LineChartDataModel<int> lineChartDataModel = new LineChartDataModel<int>()
                {
                    SeriesData = new List<ChartSeries<int>>(),
                    XAxisData = new string[rankSize],
                    ExpandProp = new string[rankSize]
                };
                var list1 = DbContext.Database.SqlQuery<ST_UkeyPersonMain>("select * from ST_UkeyPersonMain where PersonID >0");
                var list = (
                 from t in
                     (
                         from o in list1
                         
                         select new { UnitName = o.DueDay}).ToList()
                 orderby t.UnitName
                 group t by new { UnitName = t.UnitName } into G
                 select new { UnitName = G.FirstOrDefault().UnitName, Count = G.Count() } into x
                 orderby x.Count descending
                 select x).ToList();
                int num = 0;
                if (list == null || 0 >= list.Count())
                {
                    ChartSeries<int> chartSeries = new ChartSeries<int>()
                    {
                        Data = new int[rankSize],
                        Name = string.Concat("UK排行Top", rankSize.ToString())
                    };
                    ChartSeries<int> chartSeries1 = chartSeries;
                    for (int i = 0; i < rankSize; i++)
                    {
                        chartSeries1.Data[num] = 0;
                        int num1 = num;
                        num = num1 + 1;
                        lineChartDataModel.ExpandProp[num1] = "";
                    }
                    lineChartDataModel.SeriesData.Add(chartSeries1);
                    return lineChartDataModel;
                }
                ChartSeries<int> chartSeries2 = new ChartSeries<int>()
                {
                    Data = new int[rankSize],
                    Name = string.Concat("UK排行排行Top", rankSize.ToString())
                };
                ChartSeries<int> count = chartSeries2;
                foreach (var variable in list.Take(rankSize))
                {
                    count.Data[num] = (int)variable.Count;
                    int num2 = num;
                    num = num2 + 1;
                    lineChartDataModel.ExpandProp[num2] = variable.UnitName.ToString();
                    lineChartDataModel.XAxisData[num2] = (num2 + 1).ToString();
                }
                lineChartDataModel.SeriesData.Add(count);
                return lineChartDataModel;
            }
        }
解决方案

50

这个问题的重点并不是代码,是sql语句吧?
可以看到,x轴的设置

xAxis : [
        {
            type : "category",
            data : ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"]
        }
    ]

那么顾名思义,你的区间范围,应该是

xAxis : [
        {
            type : "category",
            data : ["0-30",‘31-90’....]
        }
    ]

所以,你应该先通过sql查询出数据,数据格式可能如下
区间  ,  值
0-30   ,   140
30-90  ,  155
…..
…..
然后赋值给前台的echart控件。这个都需要本人看api文档   http://echarts.baidu.com/demo.html#bar1

50

看你代码也有对取出来的结果做各种操作,那将echars的数据源处理成你的区分分割方式也不困难吧,不也就是个

source.Select(u=>{
if(u.xxx<=30)
return 0;
else if(u.xxx<=90)
return1;
//...
else
return n;
}).GroupBy(n=>n);

这样不就分组了


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于MVC和ECharts的一个问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)