2013-03-01 5 views
-1

나는 까다로운 날짜 범위 기능이 약간 있습니다.기간에 대한 LINQ 쿼리?

일정에는 시작 날짜와 시간의 두 가지 항목이 있습니다.

종료 날짜를 수행하여 계산 될 수있다

ResolveEndDate(DateTime start, double hours) 
    { 
     int days = (int)Math.Floor(hours/GetDayHours()); 

     DateTime dt = start.AddDays(days); 
    } 

작업 일 등 N 시간을 가지고 있기 때문입니다. 이를 바탕으로

, 나는 프로젝트를 찾을 수있는해야

  • 시작하기 전에
  • 시작 후 범위 및 최종 전에 내
  • 시작에서 종료하고 내
  • 시작에서 종료하고 end after after

이 작업을 수행하기 위해 어떻게 LINQ 쿼리를 작성할 수 있습니까? 이 같은

을 감안할 때 뭔가 : 다른 까다로운 일 만 월 일 및 연도가 고려되어야한다

public static IEnumerable<Project> GetProjectRange(IEnumerable<Project> projects, DateTime start, DateTime end) 
     { 
      return from p in projects 
        where p.Schedule.DateFrom.Value... 
        select p; 
     } 

. 시간을 고려해서는 안됩니다.

1 개의 조건을 모두 만족하는 쿼리.

이 쿼리를 작성하는 데는 문제가 없지만 필자가 수행하는 방식은 엄청난 혼란이 될 것입니다. 나는 날짜 범위를하는 더 나은 방법이 있기를 바라고 있습니다.

감사합니다.

+0

네 가지 기준 중 하나 또는 각 기준에 대한 쿼리를 의미합니까? 첫 번째와 네 번째 기준이 동일하지 않습니까? –

+0

죄송합니다, 이것은 실수였습니다. 또한 모든 쿼리를 만족하는 쿼리가 1 개 있습니다. – jmasterx

+2

솔직히 말하면, 이것은 미친 짓입니다. 그 조건 하에서 ... 그 모든 프로젝트. 아니? 조건별로 분류하고 싶습니까? –

답변

1

이렇게 하시겠습니까?

return 
    from p in projects 
    where 
     (  p.Schedule.DateFrom.Value < start 
      && p.Schedule.DateTo.Value > end 
     ) || // 1. 
     (  p.Schedule.DateFrom.Value < start 
      && p.Schedule.DateTo.Value > start 
      && p.Schedule.DateTo.Value < end 
     ) || // 2.    
     (  p.Schedule.DateFrom.Value > start 
      && p.Schedule.DateFrom.Value < end 
      && p.Schedule.DateTo.Value > start 
      && p.Schedule.DateTo.Value < end 
     ) || // 3.   
     (  p.Schedule.DateFrom.Value > start 
      && p.Schedule.DateFrom.Value < end 
      && p.Schedule.DateTo.Value > end 
     ) // 4. 
    select p; 
+0

이것은 2로 줄일 수 있습니다. 수표는 원래 4 건이 2 건으로 줄어들 수 있기 때문에 검사합니다. 나는 OP가 어떻게 궁금해하는지 알아 내야한다고 생각한다 – JRoughan

+0

@JRoughan 논리적으로 단순화 될 수있을 것이라고 확신한다 - 나는 그의 네 가지 경우와 일치하는 4 개의 절만 제공하고 있었다. –

+0

이것은 정확히 내가 필요로했던 것입니다. 감사합니다. – jmasterx