2011-03-24 48 views
2

我試圖呈現從下列查詢圖表:按月份創建格式場

問卷和格式化月份爲MM/YYYY

我的代碼:

public ActionResult QuestionnairesByMonth() { 

     var query = TrialDB.Questionnaires 
      .GroupBy(r => new { 
       Month = r.DateCreated.Month, 
       Year = r.DateCreated.Year, 
      }) 
      .Select(group => new { 
       Date = string.Format("{0}/{1}", group.Key.Year, group.Key.Month), 
       Total = group.Count() 
      }) 
      .ToList(); 

     var chart = new Chart(400, 200) 
      .AddTitle("Questionarios creados por mes") 
      .DataBindTable(query, "Date") 
      .Write(); 

     return null; 
    } 

但我收到以下錯誤:

LINQ to Entities無法識別方法'System.String ToString(System.String)'方法,並且此方法無法轉換i nto商店表達。

+0

我認爲這是一個Linq到EntityFramwork的問題?你可以添加標籤嗎? – Stuart 2011-03-24 11:21:29

回答

1

我建議你給你拿一個「簡單」的選擇查詢所需要的一切,將進入到數據庫,然後在本地執行格式化使用AsEnumerable切換到一個進程查詢:

var query = TrialDB.Questionnaires 
    .GroupBy(r => new { 
     Month = r.DateCreated.Month, 
     Year = r.DateCreated.Year, 
    }) 
    .Select(group => new { 
     group.Key.Year, 
     group.Key.Month, 
     Total = group.Count() 
    }) 
    .AsEnumerable() 
    .Select(x => x.Total, Date = string.Format("{0}/{1}", x.Year, x.Month)) 
    .ToList(); 

或者把它作爲一個DateTime從數據庫中拉回來時,司徒提示:

var query = TrialDB.Questionnaires 
    .GroupBy(r => new { 
     Month = r.DateCreated.Month, 
     Year = r.DateCreated.Year, 
    }) 
    .Select(group => new { 
     Date = group.Key, 
     Total = group.Count() 
    }) 
    .AsEnumerable() 
    .Select(x => x.Total, 
       Date = string.Format("{0}/{1}", x.Date.Year, x.Date.Month)) 
    .ToList(); 

更多關於AsEnumerable(),請閱讀我Edulinq blog post on it

+0

非常感謝! – Marc 2011-03-24 11:37:21

0

我認爲數據庫本身並不瞭解string.Format("{0}/{1}", group.Key.Year, group.Key.Month) - 因此您需要將信息作爲DateTime撤回,然後在表示層中格式化日期。