2017-02-28 94 views
1

我已經使用EF從數據庫中查詢數據,其中一個字段是datetimeoffset,我希望將其值(僅限日期)與日期時間對象進行比較。問題是,當我試圖entity.DbFunctions.TruncateTime這將不會使偏移消失,因爲TruncateTime返回一個DateTimeOffset對象。我不能也使用。從datetimeoffset屬性獲取唯一日期

日期因爲它會拋出一個實體linq異常。

entity.DbFunctions.TruncateTime(x.FromTime) == (assignmentDate) 
+0

請告訴我們你已經嘗試了什麼? –

+0

我無法粘貼整個查詢,但這是where實體類entity.DbFunctions.TruncateTime(x.FromTime)==(assignmentDate)' assignmentDate是DateTime搜索字段x.FromTime是DB DateTimeOffset字段 –

+0

您可以嘗試將assignDate轉換爲datetimeoffset範圍。這可能不是正確的解決方案。但一直到你找到正確的解決方案。 – Vijay

回答

0
x.FromTime.UtcDateTime == assignmentDate 
0

嘗試使用類似如下因素

entity.DbFunctions.TruncateTime(x.FromTime).Equals(assignmentDate) 

beccause ==上類型的對象表達式中被使用,將被解析爲system.Object.ReferenceEquals

1

的DateTimeOffset具有一個Date屬性,僅將日期部分作爲DateTime返回,因此沿線的內容如下:

x.FromTime.Value.Date == (assignmentDate) 

可能工作。但是,請記住,x.FromTime和TruncateTime返回的值是可空的,因此您需要使用該值並適當地處理空值。

+0

我無法在實體中調用.Date方法 - Linq –

+0

這將導致「指定的類型成員'Date'在LINQ to Entities中不受支持」異常。 LINQ將assignDate轉換爲datetime偏移量以進行比較。 – Vijay

0

您需要將truncatetime應用於兩者以獲得您正在查找的結果。

x => EntityFunctions.TruncateTime (x.FromTime) == EntityFunctions.TruncateTime(assignmentDate) 

當我嘗試LINQ轉換assignDate到DateTimeOffset。即使在截斷時間之後,它仍然失敗,因爲日期有不同的偏移量。

,這將產生一個SQL類似下面

((convert (datetimeoffset, convert(varchar(255), [Extent1].[FromTime], 102) + ' 00:00:00 ' + Right(convert(varchar(255), [Extent1].[FromTime], 121), 6) , 102)) = CAST(convert (datetime2, convert(varchar(255), @p__linq__0, 102) , 102) AS datetimeoffset)) 
OR ((convert (datetimeoffset, convert(varchar(255), [Extent1].[FromTime], 102) + '' 00:00:00 '' + Right(convert(varchar(255), [Extent1].[FromTime], 121), 6) , 102) IS NULL) 
AND (convert (datetime2, convert(varchar(255), @p__linq__0, 102) , 102) IS NULL))