2014-09-17 2 views
1

입력 레코드가 '겹치는'날짜 범위가되는지를 결정하기 위해 먼저 데이터베이스를 쿼리해야하는 문제에 대해 작업하고 있습니다. SQL에서 상당히 간단한 작업이지만 Linq에서 작동하도록 할 수는 없습니다. 다음은 관련 비즈니스 규칙입니다.Null Linq의 긴 데이터 유형 확인

Id1 == Id1이고 datespans가 겹치면 이 충돌하는 레코드를 가져 오십시오. Id2 == Id2이고 datespans가 겹치는 경우 다시 레코드를 가져 오십시오 (s)) Id1 == null이고 Id2 == null이고 datespans가 겹치는 경우 충돌하는 레코드를 다시 가져 오십시오.

resultingOverlaps = (from overlapSpans in entities.ENTITIES 
      where overlapSpans.CNTRCT_TYP_ID == contractId 
      where (overlapSpans.ID1 == Id1 || overlapSpans.Id2 == Id2 || 
        (overlapSpans.ID1 == null && overlapSpans.Id2 == null)) 
      where (
      (overlapSpans.EFF_DT < effDate && overlapSpans.END_DT >= effDate) 
       || (overlapSpans.EFF_DT > effDate && overlapSpans.EFF_DT <= endDate) 
       || (overlapSpans.EFF_DT == effDate) 
      ) 
      select overlapSpans).ToList(); 

문제는 Id1에와 ID2는 데이터 유형 길이 있다는 것입니다?, 따라서 이러한 방식으로 널 (null)을 검사 할 수없는, 또는 다른 방식으로 내가 시도했다가 다음과 같이

내 LINQ 쿼리입니다 지금까지. ('.HasValue'등을 사용하여 0에 대한 테스트)

긴 데이터 유형을 갖는 null 값은 어떻게 확인합니까?

+0

nullable 유형에 대해 'HasValue'를 살펴 보셨습니까? http://msdn.microsoft.com/en-us/library/sksw8094(v=vs.110).aspx –

+0

그래, 내 게시물은 내가 이것을 시도했다. – mmelear

+0

나의 실수는, 나는 그 비트를 놓쳤다. 코드가 컴파일되고 실행되거나 빌드되지 않습니까? –

답변

0

엔티티 프레임 워크가 이러한 속성을 "long"으로 작성하면 열이 데이터베이스에서 "NOT NULL"로 지정되어야 함을 의미합니다.

overlapSpans.ID1 및 overlapSpans.Id2가 절대로 null이 아니기 때문에 null을 확인할 필요가 없습니다.

null 일 수있는 경우 EF는 데이터 유형을 "오래"만들 수있을 정도로 똑똑합니다. (Nullable < Int64>).

또한 길이가 긴 변수는 처음에는 null 일 수 없습니다. 그들은 기본값이 "0"(기본값 (Int64)으로 확인)이므로 "null"인 경우 "0"과 같습니다.