UNTOUCHED が必要なオブジェクトの配列を渡していますが、なんらかの理由で、渡された元の配列が変更されています。
private DSPPositionPeriodDO[] CompactShortTermData(DSPPositionPeriodDO[] data)
{
DSPPositionPeriodDO[] resultArray = (DSPPositionPeriodDO[])data.Clone();
int? hoursToAggBy = null;
// it is short term, the data gets too much so decide how many
// hours to aggregate by.
var days = (_endDate - _startDate).TotalDays;
if (days <= 3)
hoursToAggBy = null;
else if (days > 3 && days <= 7)
hoursToAggBy = 1;
else if (days > 7 && days <= 14)
hoursToAggBy = 2;
else if (days > 14 && days <= 21)
hoursToAggBy = 3;
else if (days > 21)
hoursToAggBy = 4;
if (hoursToAggBy != null)
{
// round down hours
foreach (var posPeriod in resultArray)
{
var sl = posPeriod.StartLocal;
sl = sl.AddHours(-(sl.Hour % hoursToAggBy.Value));
sl = sl.AddMinutes(-sl.Minute);
posPeriod.StartLocal = sl;
}
// group by entity & time -- get average
var groupedData = resultArray.GroupBy(x => new
{
x.EntityId,
x.EntityCode,
x.StartLocal
})
.Select(g => new DSPPositionPeriodDO
{
EntityId = g.Key.EntityId,
EntityCode = g.Key.EntityCode,
StartLocal = g.Key.StartLocal,
Volume = g.Average(v => v.Volume),
AverageVolume = null
});
resultArray = groupedData.ToArray();
}
}
次のような別のコピーを作成しようとしました:
var x = original.ToArray()
toList()
Clone()
等
つまり、渡されるオブジェクトをoriginal
意味しdata
ます。まったく変更しないでください。