2017-09-16 10 views
0

これは私のコードで、現在動作しています。そして、どのようにそれらmvcのチャートヘルパーを使用して、月の表示のみを行うように日付をフォーマットする方法

マイコントローラをやって行く

public ActionResult CharterColumn() 
{ 
    ArrayList xValue = new ArrayList(); 
    ArrayList yValue = new ArrayList(); 

    var results = (from c in db.Timesheets select c); 

    results.ToList().ForEach(rs => xValue.Add(rs.Date)); 
    //I want to format this to show the only the months on the x axis 

    results.ToList().ForEach(rs => yValue.Add(rs.Hours)); 
    //And I want to calculate the sum of the hours for each month worked by a specific employee 

    new Chart(width: 800, height: 400, theme: ChartTheme.Yellow) 
    .AddTitle("Test") 
    .AddSeries("Default", chartType: "Column", xValue: xValue, yValues: yValue) 
    .Write("bmp"); 

    return null; 
} 

と私の見解

<div> 
    <img src= "@Url.Action("CharterColumn")" alt="Chart"/> 
</div> 

答えて

1

グループ化できます。このような月と年によってTimeSheet記録:

DateTimeFormatInfo dtfi = new DateTimeFormatInfo(); 

// gets the records grouped based on Year and Month. 
// Creates an object of IEnumerable<IGrouping<>> type 
var groupedByMonth = result 
         .OrderByDescending(x => x.Date) 
         .GroupBy(x => new { x.Date.Year, x.Date.Month }).ToList(); 


// gets the months names in a list 
List<string> monthNames = groupedByMonth 
        .Select(a => dtfi.GetAbbreviatedMonthName(a.Key.Month)) 
        .ToList(); 

// gets the total hours per month 
List<int> hoursPerMonth = groupedByMonth 
         .Select(a => a.Sum(p => p.Hours)) 
         .ToList(); 


ArrayList xValue = new ArrayList(monthNames); 
ArrayList yValue = new ArrayList(hoursPerMonth); 

月の名前を取得するのにDateTimeFormatInfoを使用しています。また、このことなくこれを達成することができます:

List<string> monthNames = groupedByMonth 
        .Select(a => a.FirstOrDefault().Date.ToString("MMMM")) 
        .ToList(); 
+0

型「System.NotSupportedException」の例外がEntityFramework.SqlServer.dllで発生したが、ユーザーコードで 追加情報は処理されませんでした:メソッドを認識しないエンティティへのLINQを'System.String GetAbbreviatedMonthName(Int32)'メソッドであり、このメソッドをストア式に変換することはできません。こんにちは私はこのエラーを取得しようとしました – Kimberly

+0

@キンバリー最後に述べたように 'dtfi'なしでそれをやってみてください。 linqクエリの前に '.ToList()'をしなければならないと思います。 – adiga

+0

追加情報:LINQ to Entitiesは、 'System.String ToString(System.String)'メソッドを認識せず、このメソッドをストア式に変換することはできません。 – Kimberly