-1

我需要一些棘手的日期范围函数。

时间表有两件事……开始日期和时间。

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

   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;
       }

另一个棘手的事情是只应考虑月日和年。不应该考虑时间。

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

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

谢谢

4

1 回答 1

2

像这样的东西?

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;
于 2013-03-01T19:00:54.143 回答