2011-05-08 6 views
2

linq-to-sql 쿼리에 where 절을 작성했습니다. 열 이름이 GMT 시간대에 저장된 AppointTime이라고 가정 해 봅시다. 필자가 작성한 쿼리는 동적이며 UI를 통해 사용자는 오늘 어제, 2 일 전, 3 일, 5 일, 10 일, 30 일, 60 일, 90 일 전에 설정된 약속을 선택할 수 있습니다.where timezones with clause

저는 사용자의 시간대를 십진수로 나타냅니다 (예 : 미국 태평양 표준시로 -9.0).

2 일 전에 약속을 보려는 사용자가 쿼리 결과 집합에 나타나도록 where 절을 작성하는 가장 좋은 방법은 무엇입니까?

+0

테이블 스키마를 제공 할 수 있습니까? – faester

+0

테이블에는 약속이 설정된 시간 인 AppointSetDateTime 열이 있습니다. 3 일 전에 설정 한 모든 약속을 어떻게 검색합니까? 사용자의 시간대 (예 : TheUserZone = -9.00)가 포함 된 함수에 전달되는 소수점이 있습니다. – frenchie

+0

BTW, LINQ to SQL을 사용하는 경우 linq가 아닌 linq-to-sql 태그를 사용해야합니다. "linq"은 모든 LINQ 기술을 나타냅니다. –

답변

1

이와 비슷한?

int days = 2; // set by UI? 
var upcoming = 
    from appointment in dc.Appointments 
    where appointment.AppointTime.AddHours(userTZ) < DateTime.UtcNow.AddDays(days) 
      && appointment.AppointTime > DateTime.UtcNow 
    orderby appointment.AppointTime ascending 
    select appointment; 

나는 당신이 얻을 위해 노력하고 정확하게 정보에 완전히 명확하지 않다 고백 ... 그러나 이것은 잘하면 당신이 필요로하는 쿼리를 작성하기에 충분한 단서를 포함해야합니다. 두 가지를 기억하십시오 - DateTimeAddx() 기능은 빼기에 음수 값을 취할 수 있습니다. 미래의 시간은 두 시간을 비교할 때 과거의 시간보다 큽니다. DateTimes.

+0

예, AddHours가 내가 찾고있는 것이 었습니다. 사용자가 마지막 x 일 동안 설정되지 않은 임무를 선택하는 경우도 있기 때문에 감소 사례가 있습니까? – frenchie

+0

@frenchie 아 물론, 이미 통과 한 것을 표시하고 싶지는 않습니다. 지금보다 적은 약속 시간을 제외하는 조건을 추가합시다. (업데이트 참조) –

+0

도움, 감사합니다. – frenchie