var vals = (from r in result
group r by DbFunctions.TruncateTime(r.Created) into g
select new { count = g.Count(), date = g});
当我尝试运行以上内容时,我收到以下错误
Results
是数据库查询的结果
"此功能只能从LINQ到实体调用。"
模型(result
)返回Dates(以及其他内容),我尝试做的只是按日期(created
)分组并计算它存在的次数。
Created
已经是DateTime
我做错了什么?
答案 0 :(得分:3)
DbFunctions
类的目的是将表达式转换为正确的SQL语法:
提供公共语言运行时(CLR)方法,公开EDM规范函数以在DbContext或ObjectContext LINQ to Entities查询中使用。
由于您没有查询SQL源,因此没有理由使用DbFunctions
方法。
等效的Linq-to-object查询将是:
var vals = (from r in result
group r by r.Created.Date into g
select new { v = g.Count(), d = g});
问题可能是Created为
DateTime?
您可以使用条件运算符来解释它:
var vals = (from r in result
group r by r.Created.HasValue ? (DateTime?)r.Created.Value.Date
: (DateTime?)null
into g
select new { v = g.Count(), d = g});
或只是
var vals = (from r in result
group r by r.Created.Value.Date into g
select new { v = g.Count(), d = g});
如果Created
不可能为空(或者如果你想抛出异常)