2017-01-21 5 views
0

1か月間の新規ユーザー数をカウントしたいと思います。しかし、これは私が受け取っている出力です。繰り返し月をちょうど "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; } 
} 

その後、あなたはGROUPBYでLINQクエリを使用してデータを取得し、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'の値が何であるかを確認してください。 –

関連する問題