2017-01-21 33 views
0

我想统计一个月内新用户的数量。但是,这是我收到的输出。如何将重复的月份分组为“Jan”,“Nov”。非常感谢你的帮助。在MVC图中按月分组

Image of output

public ActionResult UserPerMonth() 
{ 

    var _con = new DBEntities(); 
    ArrayList xValue = new ArrayList(); 
    ArrayList yValue = new ArrayList(); 
    var results = (from c in _con.Users select c); 
    results.ToList().ForEach(rs => yValue.Add(rs.id.ToString().Count())); 
    results.ToList().ForEach(rs => xValue.Add(rs.date.Value.ToString("MMM-yyyy"))); 

    var chart = new Chart(width: 300, height: 200) 
       .AddTitle("Users per month") 
       .AddLegend() 
       .AddSeries(
       chartType: "Column", 
       xValue: xValue, 
       yValues: yValue) 
       .GetBytes("png"); 
    return File(chart, "image/png"); 
} 

回答

1

有可能是做这件事的更简洁的方式,但是这是为我工作。为图表数据添加一个类,例如

public class ChartData 
{ 
    public string Month { get; set; } 
    public int Count { get; set; } 
} 

然后你可以使用LINQ查询与GROUPBY和计算得到的数据,并把它给ChartData类型,然后将这些值相关的轴:

public ActionResult UserPerMonth() 
{ 

    var _con = new DBEntities(); 
    ArrayList xValue = new ArrayList(); 
    ArrayList yValue = new ArrayList(); 

    var results = (from c in _con.Users select c); 

    var axis = results.GroupBy(r => r.date.Value.ToString("MMM-yyyy")) 
      .Select(r => new ChartData 
      { 
       Month = r.Key, 
       Count = r.Count() 
      }).ToList(); 

    foreach (var item in axis) 
    { 
     xValue.Add(item.Month); 
     yValue.Add(item.Count); 
    } 


    var chart = new Chart(width: 300, height: 200) 
     .AddTitle("Users per month") 
     .AddLegend() 
     .AddSeries(
      chartType: "Column", 
      xValue: xValue, 
      yValues: yValue) 
     .GetBytes("png"); 
    return File(chart, "image/png"); 
} 
+0

感谢您的帮助,我认为这部分有一个错字Month = n.Key, Count = n.Count(),但是代码不显示图表@James – jamietoh

+0

道歉,是的,修复了错字 - 你可以试试。如果没有,请设置断点,看看'axis'的值是什么? –