2015-04-03 51 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); 
      });