1

我收到一条错误消息,提示 linq to entity 不知道.Date以下查询中的运算符:

var data = from p in page_loads
           join f in sites
           on p.site_id equals f.id
           join tr in test_runs
           on p.test_run_id equals tr.id
           where f.id == 17
           group p by  p.created_at.Date into g
           select new { time = g.Average(t => t.time), created_at = g.Key };

注: created_atNOT NULL在数据库中。我指出这一点是因为我知道 created_at 不可为空,并且 linq to entity 会有问题。但我不知道如何解决这个问题。

编辑:

[EdmScalarProperty(EntityKeyProperty = false, IsNullable = false)]
    [DataMember]
    public DateTime created_at { get; set; }
4

2 回答 2

4

听起来您可能想要SqlFunctions.DatePart

group p by SqlFunctions.DatePart("day", p.created_at) into g
于 2012-06-20T19:05:41.780 回答
0

您可以按(为每个年/月/日组合创建一个新的唯一匿名对象)中的其他字段进行分组,DateTime并且您将希望使用它let来简化查询:

var data = from p in x
       join f in sites
       on p.site_id equals f.id
       join tr in test_runs
       on p.test_run_id equals tr.id           
       where f.id == 17
       let date = p.created_at
       group p by new { y = date.Year, m = date.Month, d = date.Day} into g
       select new { time = g.Average(t => t.time), created_at = g.Key };

如果您希望created_at最终投影中的 不是匿名类型,则可以DateTime通过将 3 个匿名值传递给DateTime构造函数将 group-by 匿名类型转换回 a 。

另一个使用EntityFunctions.TruncateTime.

于 2012-06-20T23:40:15.620 回答