2016-11-02 2 views
3

LINQ에서 두 개의 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가 생성하는 쿼리보다 훨씬 간단하고 성능이 좋습니다.

가장 좋은 조치는 무엇입니까?

+0

시간을 자정으로 자른 다음 날짜의 차이를 가져 오는 '날짜'속성을 사용하십시오. DateTime은 1/1/1900 년 이후의 일 수와 정수 부분이 현재 시간/24 (즉, 3.5 시간/24 시간) 인 이중으로 컴퓨터에 저장됩니다. – jdweng

+0

@jdweng'Date' 속성은 L2E에서 지원하지 않습니다. –

답변

0

포함 된 시간에 까다로울까요?

var cmpStartDate = intendedDate.AddDays(1); 

var ans = SomeTable.Where(a => a.StartUtc < cmpStartDate && a.EndUtc > intendedDate.Subtract(TimeSpan.FromTicks(1))); 
관련 문제