0

以下に示すように、30 分間隔の TimeInterval データのリストがあります。

List<TimeInterval> testData = new List<TimeInterval>();
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 6:00:00 AM"), End = DateTime.Parse("2012-05-09 6:30:00 AM"), Value = 1 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 6:30:00 AM"), End = DateTime.Parse("2012-05-09 7:00:00 AM"), Value = 1 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 7:00:00 AM"), End = DateTime.Parse("2012-05-09 7:30:00 AM"), Value = 1 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-09 7:30:00 AM"), End = DateTime.Parse("2012-05-09 8:00:00 AM"), Value = 1 });
.....
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-10 7:00:00 AM"), End = DateTime.Parse("2012-05-10 7:30:00 AM"), Value = 20 });
testData.Add(new TimeInterval() { Start = DateTime.Parse("2012-05-10 7:30:00 AM"), End = DateTime.Parse("2012-05-10 8:00:00 AM"), Value = 10 });
................... up to N number of N number of years.


public class TimeInterval
    {
       public DateTime Start { get; set; }
       public DateTime End { get; set; }
       public decimal Value { get; set; }

    }

上記のデータを次のように集計する最善の方法を提案してください。

  1. 時間

ここで提案された解決策を試してみましたが、上記の要件を満たすものはないようです。ご協力いただきありがとうございます。

上記の例の Hour の予想される結果は次のとおりです。

Lists Of:

TimeInterval() { Start = DateTime.Parse("2012-05-09 6:00:00 AM"), End = DateTime.Parse("2012-05-09 7:00:00 AM"), Value = 2 }
TimeInterval() { Start = DateTime.Parse("2012-05-09 7:00:00 AM"), End = DateTime.Parse("2012-05-09 8:00:00 AM"), Value = 2 }
...
TimeInterval() { Start = DateTime.Parse("2012-05-10 7:00:00 AM"), End = DateTime.Parse("2012-05-10 8:00:00 AM"), Value = 2 }

Daysの場合は、その日の合計になります。週の場合、全体の週などの合計になります。基本的に、特定の集計タイプの値を合計します。

4

1 に答える 1

1
List<Interval> CreatHourIntervals(DateTime start, int count, int intervalValue, int val)
{
    return     Enumerable.Range(0,count)
               .Select(x=> new Interval
                               {
                                 StartDate = start.AddHours(x*intervalValue), 
                                 EndDate = start.AddHours((x + 1)*intervalValue),
                                 value = val
                               }
                         ).ToList(); 
}

説明

start:間隔の最初の項目の開始日です。

count:必要な間隔の数です。

intervalValue: 間隔の差です。たとえば、時間の場合、これは 1 ~ 12 の間で変化します (分数の場合もあります)。たとえば、 に設定すると2、各間隔の長さは2時間になります。

他のタイプについては、関連するメソッドを自分で書くことができます。

于 2012-05-09T06:59:15.240 に答える