我正在尝试从以下查询中呈现图表:
按月创建的调查问卷,并将月份格式化为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)'方法,并且此方法无法转换为商店表达式。
答案 0 :(得分: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
,正如Stuart建议的那样:
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。
答案 1 :(得分:0)
我认为数据库本身不理解string.Format("{0}/{1}", group.Key.Year, group.Key.Month)
- 因此您需要将信息作为DateTime撤回,然后在表示层中格式化日期。