2017-02-28 4 views
1

私はEFを使用してDBからデータを取得しています。フィールドの1つはdatetimeoffsetです。その値(日付のみ)をdatetimeオブジェクトと比較する必要があります。問題は、entity.DbFunctions.TruncateTimeを試してみると、TruncateTimeがDateTimeOffsetオブジェクトを返すときに、オフセットがなくなるということです。私も使うことはできません。datetimeoffsetプロパティの日付のみを取得する

エンティティをlinq例外にスローします。

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

以下のようなSQLの何かを生成します、あなたがしようとしているものを私たちに示してください? –

+0

クエリ全体を貼り付けることはできませんが、これはクラス 'entity.DbFunctions.TruncateTime(x.FromTime)==(assignmentDate)' です。assignmentDateはDateTime検索フィールドです.FromTimeはDB DateTimeOffsetフィールドです –

+0

assignmentDateをdatetimeoffsetの範囲に変換します。これは正しい解決策ではないかもしれません。しかし、あなたが正しい解決策を得るまでの道のり。 – Vijay

答えて

0
x.FromTime.UtcDateTime == assignmentDate 
0

== beccause folowing

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

のようなものを使用しようが、それはsystem.Object.ReferenceEquals

1

のDateTimeOffsetているに解決される型オブジェクトの表現に使用されています日付だけをDateTimeとして返すDateプロパティです。したがって、次の行に沿った何か:

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

が作用する場合があります。ただし、x.FromTimeとTruncateTimeによって返される値はNullableであるため、値を使用してNullを適切に処理する必要があることに注意してください。

+0

Entity-Linqで.Dateメソッドを呼び出せません –

+0

これは「指定された型メンバー 'Date'はLINQ to Entitiesではサポートされていません」という結果になります。 LINQは、比較のために、assignmentDateをdatetimeオフセットに変換します。 – Vijay

0

探している結果を得るには、両方にtruncatetimeを適用する必要があります。

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

私がLINQを試したところ、assignmentDateをDateTimeOffsetに変換していました。切り捨て後も、日付に異なるオフセットがあったため失敗していました。

これは

((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)) 
関連する問題