Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用LINQ to实体将DateTime字段划分为间隔?_C#_Linq_Entity Framework_Sybase - Fatal编程技术网

C# 如何使用LINQ to实体将DateTime字段划分为间隔?

C# 如何使用LINQ to实体将DateTime字段划分为间隔?,c#,linq,entity-framework,sybase,C#,Linq,Entity Framework,Sybase,我有以下代码行: group p by new DateTime((p.DateTime.Value.Ticks / interval.Ticks) * interval.Ticks).TimeOfDay 这在LINQ to对象中非常有效,但在LINQ to实体中不起作用。我有两个任务: 它为什么有效?我不明白如何将时间除以一个时间间隔,然后再乘以这个时间间隔,神奇地将我的12:37转换为12:30。我的数学基本经验是:(A/B)*B=A。(由@spencer在评论中澄清。非常感谢!) 如何

我有以下代码行:

group p by new DateTime((p.DateTime.Value.Ticks / interval.Ticks) * interval.Ticks).TimeOfDay
这在LINQ to对象中非常有效,但在LINQ to实体中不起作用。我有两个任务:

  • 它为什么有效?我不明白如何将时间除以一个时间间隔,然后再乘以这个时间间隔,神奇地将我的12:37转换为12:30。我的数学基本经验是:(A/B)*B=A。(由@spencer在评论中澄清。非常感谢!)

  • 如何重新格式化此行以在LINQ to实体中工作


l2e无法翻译您使用的日期时间方法。考虑使用类进行支持的时间操作。

有关更多详细信息,请参阅

例如,假设你的间歇时间是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
         )

错误的假设<代码>(A/B)*B在处理整数除法时不一定等于
A
。e、 g.
(3/2)*2==2
,因为3/2在现实世界中实际上等于1.5,但在整数域中被截断为1。@spender Ok,那么如何将时间值除以一个间隔,然后再乘以该间隔,最终得到我想要的结果呢?它真的让我很烦恼,有些东西在工作,但不知道它是如何从A到B的。如上所述。我想知道3在2秒的时间片上的位置。因此(3/2)*2得到2,这将是该切片的开始。@spender lol,哇。出于某种原因,我不明白那个简单的事实。我想,“嗯……是的,它是。(A/B)*B总是等于A。”这是一种过度思考,没有考虑到结果会被截断。这看起来很有趣:嗯,我确定我必须使用EntityFunctions.CreateDateTime或EntityFunctions.DiffSomething之类的东西,但我不确定如何转换当前的新日期时间(滴答声)EntityFunction格式的内容。我自己在这里有点不知所措,但我在上面虚张声势地回答了一个问题!你可能需要使用CreateDateTime来代替
开始
,也许是在
let
子句中。是的,我已经玩弄了一两天了很多不同的想法,但似乎没有想出有效的方法。我尝试了d你的,但没有得到我需要的结果。算出了,你非常接近:
EntityFunctions.AddSeconds(start,(EntityFuctions.DiffSeconds(start,p.DateTime)/1800)*1800)
我的数据库的“start”是
newdatetime(1970,1,1,0,0,DateTime.Utc)
。我不知道是因为p.DateTime出现在开始之前,还是因为我没有正确设置开始字段,而第一次不起作用,但现在起作用了。