LINQ查询日期范围?

时间:2013-03-01 18:46:12

标签: c# asp.net linq

我需要一些棘手的日期范围功能。

附表有2件事......开始日期和时间。

结束日期可以通过以下方式计算:

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

       DateTime dt = start.AddDays(days);
   }

这是因为工作日有N小时等等。

基于此,我需要找到以下项目:

  • 在范围之前开始,在
  • 之后结束
  • 之前开始并结束
  • 开始并结束
  • 之内和之后开始

如何编写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;
       }

另一个棘手的问题是只应考虑月份和年份。不应该考虑时间。

满足所有4个条件的1个查询。

我编写这个查询没有问题,但我这样做的方式将是一个巨大的混乱。我希望有更好的方法来做日期范围。

由于

1 个答案:

答案 0 :(得分: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;