2015-04-03 38 views
1

LINQ表达我的表情:转换的foreach与选择

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表达式如下所示?

+0

https://msdn.microsoft.com/en-us/library/bwabdf9z%28v=vs.110%29.aspx – 2015-04-03 11:52:26

+0

.ForEach(PARAM => ...)或..Select(参数=> {...})? – 2015-04-03 11:54:31

回答

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); 
      });