我一直在测试比较两个DateTimeOffset
对象的几种方法,但我不确定哪一种是最有效和实际正确的方法。
我尝试了以下方法:
SomeTable.Where(a => DbFunctions.TruncateTime(a.StartUtc) <= intendedDate && DbFunctions.TruncateTime(a.EndUtc) >= intendedDate);
生成了这个庞大复杂的查询用于比较:
((convert (datetimeoffset, convert(varchar(255), [Extent1].[StartUtc], 102) + ' 00:00:00 ' + Right(convert(varchar(255), [Extent1].[StartUtc], 121), 6) , 102)) <= @p__linq__1) AND ((convert (datetimeoffset, convert(varchar(255), [Extent1].[EndUtc], 102) + ' 00:00:00 ' + Right(convert(varchar(255), [Extent1].[EndUtc], 121), 6) , 102)) >= @p__linq__2)
也尝试了DiffDays
,生成了一个更易读的查询
((DATEDIFF (day, [Extent1].[StartUtc], '2016-11-01 00:00:00 -02:00')) >= 0) AND ((DATEDIFF (day, '2016-11-01 00:00:00 -02:00', [Extent1].[EndUtc])) >= 0)
但是这个查询考虑了时间因素,我不能接受。
我不是专家,但是第一个查询对于如此简单的要求来说似乎过长和复杂。在这种情况下,我是否应该使用原始的SQL而不是LINQ与EF?我无法确定哪种方法更有效率。
我觉得CAST('2016-11-02 00:00:00 AM -02:00' AS DATE)
比EF生成的查询更简单,因此更高效。
在这里最好采取什么行动呢?
Date
属性。 - Ivan Stoev