private Dictionary<int, uint> GetMeterValues(SpatialRecord spatialRecord, List<WorkingData> meters, Dictionary<WorkingData, int> metersByIsoIds)
{
var dlvsToWrite = new Dictionary<int, uint>();
var metersWithValues = meters.Where(x => spatialRecord.GetMeterValue(x) != null);
var dlvOrders = metersWithValues.Select(m => metersByIsoIds[m]).Distinct();
foreach (var order in dlvOrders)
{
var dlvMeters = meters.Where(m => metersByIsoIds[m] == order).ToList();
var numericMeter = dlvMeters[0] as NumericWorkingData;
UInt32? value = null;
if (numericMeter != null && spatialRecord.GetMeterValue(numericMeter) != null)
{
value = _numericValueMapper.Map(numericMeter, spatialRecord);
}
var isoEnumerateMeter = dlvMeters[0] as ISOEnumeratedMeter;
if (isoEnumerateMeter != null && spatialRecord.GetMeterValue(isoEnumerateMeter) != null)
{
value = _enumeratedValueMapper.Map(isoEnumerateMeter, dlvMeters, spatialRecord);
}
if (value == null)
continue;
if (_previousDlvs.ContainsKey(order) && _previousDlvs[order] != value)
{
_previousDlvs[order] = value.Value;
dlvsToWrite.Add(order, value.Value);
}
else if (!_previousDlvs.ContainsKey(order))
{
_previousDlvs.Add(order, value.Value);
dlvsToWrite.Add(order, value.Value);
}
}
return dlvsToWrite;
}