AgGateway.ADAPT.ISOv4Plugin.ExportMappers.BinaryWriter.GetMeterValues C# (CSharp) Method

GetMeterValues() private method

private GetMeterValues ( AgGateway.ADAPT.ApplicationDataModel.LoggedData.SpatialRecord spatialRecord, List meters, int>.Dictionary metersByIsoIds ) : uint>.Dictionary
spatialRecord AgGateway.ADAPT.ApplicationDataModel.LoggedData.SpatialRecord
meters List
metersByIsoIds int>.Dictionary
return uint>.Dictionary
        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;
        }