日付のリストから一連の日付範囲を作成しようとしています。
これらの日付は私のオブジェクトに存在します。基本的に、各行を反復処理し、反復処理を続けます。タイムスパンの差が 5 分を超えると停止し、エンドポイントを日付範囲として使用します。以下のアルゴリズムがありますが、問題は多くのデータ行を除外することです:
以下のサンプル データと目的の出力を参照してください。
**Sample Data**
Start_Date Start_Date_Time Replicate
12.12.2012 8:22:58 10
12.12.2012 8:22:58 30
12.12.2012 8:22:58 31
12.12.2012 8:22:58 32
12.12.2012 8:22:58 33
12.12.2012 8:22:58 34
12.14.2012 9:49:27 54
12.14.2012 9:49:27 55
12.14.2012 9:49:27 78
12.14.2012 9:49:27 99
12.14.2012 9:58 120
12.14.2012 9:58 140
12.14.2012 9:58 142
12/12/2012 9:59 144
12/12/2012 9:59 146
12/12/2012 9:59 148
12/12/2012 9:59 150
**Desired Output**
Date Ranges
8:22:58-8:22:58 Replicate10-34
9:49:27-9:49:27 Replicate54-99
9:58-9:59 Replicate120-150
私のコードでは結果が得られますが、多くの行が除外されます:
lf.ReplicateBlocks.OrderBy(x => x.InitiationDate);
上記の開始日は、開始日と開始時刻です。上記のリストを昇順で並べ替え、最小の日付/時刻から開始しました。
DateTime minimumDateTime = DateTime.MinValue;
foreach (RunLog.Domain.Entities.ReplicateBlock rb in lf.ReplicateBlocks)
{
TimeSpan intervalMinutes = rb.InitiationDate.Subtract(minimumDateTime);
if (intervalMinutes.TotalMinutes >= 5)
{
minimumDateTime = rb.InitiationDate;
//minDates.Add(minimumDateTime);
UserConfirmationErrors confirmationRun = new UserConfirmationErrors();
confirmationRun.minDate = rb.InitiationDate;
confirmationRun.replicateID = rb.ReplicateId;
uc.userConfirmationList.Add(confirmationRun);
}
}
List<RunLog.Domain.Entities.RunLogEntryDatesDisplay> reDisplay = new List<Domain.Entities.RunLogEntryDatesDisplay>();
foreach (var minDate in uc.userConfirmationList)
{
RunLog.Domain.Entities.RunLogEntryDatesDisplay red = new Domain.Entities.RunLogEntryDatesDisplay();
reDisplay.Add(new Domain.Entities.RunLogEntryDatesDisplay() { runDate = minDate.minDate, DateRange = string.Format("{0} - {1}", minDate.minDate, minDate.minDate.AddMinutes(5)), MinimumReplicateId = minDate.replicateID.ToString() });
}
//return reDisplay.OrderByDescending(t => t.runDate).ToList();
return reDisplay;
日付範囲を含むユーザー確認リストが形成されたら、それをチェックボックス リストの形式でビューに送信します。ユーザーはそれらの日付を選択し、選択した日付を取得して、以下でそれらのレコードを再度探します。
var query = from d in selectedDates
from o in lf.ReplicateBlocks
where (d.Checked &&
o.InitiationDate >= d.runDate &&
o.InitiationDate <= d.runDate.AddMinutes(5))
select o;