日期范围的LINQ查询

本文关键字:查询 LINQ 范围 日期 | 更新日期: 2023-09-27 18:01:51

我需要一个有点棘手的日期范围函数。

一个时间表有2件事…开始日期和小时。

End Date可以通过以下方式计算:

   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条查询。

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

谢谢

日期范围的LINQ查询

像这样?

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;