2012-03-01 3 views
2

내 데이터베이스를 볼 때 DateTime 인 Connections 테이블의 Date 필드에는 2012-03-01 01 : 49 : 02.097 값이 있습니다. .C# 엔터티 datetime은 날짜를 반환하지만 시간은 항상 00:00:00

그러나 지난 시간에 연결되어있는 사용자가 있다면 확인하고자 할 때 :

if (user.Connections.Max(t => t.Date).Date.AddHours(1) > DateTime.Now) 

날짜의 시간 부분이 항상 0이다.

그래서 내 코드는 자정과 아침 1 시간 사이에만 작동합니다.

도움 주셔서 감사합니다.

답변

6

약간의 혼란을 낳고있는 .Date의 두 가지 의미가 있습니다. 여기 :

t => t.Date 

이 "회원이 Date라는 DateTime에 액세스"를 의미한다; 그래서 여기에 :

이것이 의미하는
.Max(t => t.Date) 

"모든 Date 회원을 통해 최대를 발견하는 DateTime"그러나

! 이 :

).Date.A 
^^^^^ 

(모든 값은 DateTime 일 전용 일부인 .Date 부재를 가지고) "이 값의 일시에만 참여"수단; 그래서 예 : 자정까지 간 다음 1 시간 추가합니다. 그래서; 그렇게하지 마! 당신이 원하는 것은 아마도 : 아마도 더 효율적으로

if (user.Connections.Max(t => t.Date).AddHours(1) > DateTime.Now) 

나 : 수는 단락

var cutoff = DateTime.Now.AddHours(-1); 
if (user.Connections.Any(t => t.Date > cutoff)) { 
    ... 
} 

사인.

+0

대단히 고마워요! – JoRouss

+0

@JoRouss 당신을 환영합니다 –

+0

내 데이터베이스에서 더 중요한 이름을 사용해야합니다! – JoRouss

관련 문제