Преобразуйте foreach в выражение linq с помощью select

1

У меня есть выражение:

  var newValues = MetarDecoder.Decode(telegram)
                .OfType<MeteoParameter<decimal>>()
                .Select(parameter => MeteoParameterFactory
                .Create(parameter.ParameterId, parameter.DateTime.ToLocalTime(), parameter.Status, parameter.Value))                            
                .ToList();

MeteoParameterFactory не может быть изменен по некоторым причинам, просто возьмите его как есть.

MeteoParameter также имеет свойство string Info.

Мне нужно скопировать Info из старого parameter в результат MeteoParameterFactory.Create().

Без LINQ это выглядит так:

 var val = MetarDecoder.Decode(telegram).OfType<MeteoParameter<decimal>>().ToList();

                        foreach (var param in val)
                        {
                            var parameter = MeteoParameterFactory.Create(param.ParameterId, param.DateTime.ToLocalTime(), param.Status, param.Value);
                            parameter.Info = param.Info;
                            newValues.Add(parameter);
                        }

Итак, есть ли способ добавить эту часть в выражение LINQ, показанное ниже?

Теги:
linq

2 ответа

3
Лучший ответ

В Select вы можете создать анонимную функцию, которая возвращает parameter созданный внутри него.

var newValues = MetarDecoder.Decode(telegram)
            .OfType<MeteoParameter<decimal>>()
            .Select(param => { 
                   var parameter = MeteoParameterFactory.Create(param.ParameterId, param.DateTime.ToLocalTime(), param.Status, param.Value);
                   parameter.Info = param.Info;
                   return parameter;
             }).ToList();
1
var val = MetarDecoder
            .Decode(telegram)
            .OfType<MeteoParameter<decimal>>()
            .ToList()
            .ForEach(param => 
            {
                var parameter = MeteoParameterFactory.Create(param.ParameterId, param.DateTime.ToLocalTime(), param.Status, param.Value);
                parameter.Info = param.Info;
                newValues.Add(parameter);
            });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню