3
LINQの2つのDateTimeOffset
オブジェクトを比較するためのいくつかのアプローチを試してきましたが、どちらが最も効率的で実際の正しい方法であるかわかりませんそれ。 LINQで時間を持たない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)
このクエリには時間を要しますが、私はそれを持つことはできません。
私はエキスパートではありませんが、最初のクエリは、このような単純な要件のために実際には長くて複雑なようです。これは、EFでLINQの代わりに未処理のSQLを使用する必要がある場合ですか?私はどちらが最も効率的なアプローチであるかを判断することはできません。 CAST('2016-11-02 00:00:00 AM -02:00' AS DATE)
は、EFが生成するクエリよりもはるかに簡単でパフォーマンスが良いと感じています。
ここで最も効果的な方法は何ですか?
時間を[Midnight]に切り捨て、日付の差を取得する 'Date'プロパティを使用します。 DateTimeはコンピュータに二重として格納され、整数部分は1/1/1900からの日数であり、現在時刻/ 24(すなわち3.5時間/ 24時間)である。 – jdweng
@jdweng 'Date'プロパティはL2Eではサポートされていません –