3
我一直在測試幾種方法來比較兩個LINQ to Entities中的DateTimeOffset
對象,但我不確定哪一個對象最有效率和實際正確的做法它。正確地比較LINQ to Entities中沒有Time的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'屬性將截斷時間爲午夜,然後獲取日期之間的差異。 DateTime以雙精度形式存儲在計算機中,整數部分是從1/1/1900開始的天數,小數部分是當前時間/ 24(即3.5小時/ 24小時)。 – jdweng
@jdweng L2E不支持Date屬性 –