如何使用LINQ-to-Entities将DateTime字段划分为间隔?

时间:2012-06-27 23:49:37

标签: c# linq entity-framework sybase

我有以下代码行:

group p by new DateTime((p.DateTime.Value.Ticks / interval.Ticks) * interval.Ticks).TimeOfDay

这在LINQ-to-Objects中很有用,但在LINQ-to-Entities中不起作用。我有两个问题:

  • 为什么会这样?我不明白如何将时间除以一个间隔然后乘以相同的间隔会神奇地将我的12:37转换为12:30。我对数学的基本经验是(A / B)* B = A 。 (在评论中被@spencer清理过来。非常感谢!)

  • 如何重新格式化此行以在LINQ-to-Entities中工作?

1 个答案:

答案 0 :(得分:0)

您正在使用的DateTime方法无法由l2e翻译。考虑使用EntityFunctions类进行支持的时间操作。

有关详细信息,请参阅here

例如,假设你的间隔是60秒,我猜你可能会做类似的事情:

DateTime? start=new DateTime(2000,1,1); //start of first interval
...group p by 
    EntityFunctions
        .AddSeconds(
            start,
            (EntityFunctions
                .DiffSeconds(p.DateTime,start)/60)*60
         )