-1

ちょっとトリッキーな日付範囲関数が必要です。

スケジュールには、開始日と時間の 2 つがあります。

終了日は、次のようにして計算できます。

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

       DateTime dt = start.AddDays(days);
   }

これは、1 日の稼働時間が 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 つの条件すべてを満たす 1 つのクエリ。

このクエリを書くのに問題はありませんが、私がそれを行う方法は非常に混乱するでしょう. 日付範囲を行うためのより良い方法があることを願っています。

ありがとう

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 に答える