2012-03-28 4 views
0

Ist es möglich, folgenden Code zu Linq zu transformieren, dass es wie etwas mehr schön denken aussehenTransformation zu Linq

foreach (var entry in bottleneck.Item2) 
{ 
    if(entry.ChangeoverTime > 0) 
    { 
     avarangechangeOverTimes += entry.ChangeoverTime; 
     ++counter; 
    } 

    if (entry.ChangeoverTime > maxchangeOverTimes) 
    { 
     maxchangeOverTimes = entry.ChangeoverTime; 
    } 

    changeovertime.ChangeoverTimes.Add 
    (
     new ChangeOverDateValue 
     { 
      ChangeoverValue = entry.ChangeoverTime, 
      Color = ChangeOverTimeToColor(entry.ChangeoverTime), 
      StartTime = entry.StartTime 
     } 
    ); 
} 

Antwort

3

Wenn die Anzahl der Einträge in bottleneck.Item2 ist nicht riesig, können Sie das gleiche mit diesen drei Aussagen erreichen:

var maxChangeOverTime = bottleneck.Item2.Max(x => x.ChangeoverTime); 
var averageChangeOverTime = bottleneck.Item2.Average(x => x.ChangeoverTime); 
var result 
    = bottleneck.Item2 
       .Select(x => new ChangeOverDateValue 
          { 
           ChangeoverValue = x.ChangeoverTime, 
           Color = ChangeOverTimeToColor(x.ChangeoverTime), 
           StartTime = x.StartTime 
          }); 
changeovertime.ChangeoverTimes.AddRange(result); 

Bitte beachten Sie, dass dies bottleneck.Item2 dreimal statt nur einmal mit Ihrem aktuellen Code aufzählt.

+0

Hängt an welchem ​​Engpass ist. Es wird immer iterieren, aber wenn ein Flaschenhals ein dbcontext ist, wird die linq-Anweisung in sql übersetzt. Andere als +1 für die beste Lösung ^^ – Frederiek

0

ich, dass Sie nur die äußere foreach ändern können:

bottleneck.Items2.ToList().Foreach(entry => 
{ 
// your code 
}); 
0
bottleneck.Item2.where(entry => entry.ChangeoverTime).ToList().Foreach(entry => { 
    avarangechangeOverTimes += entry.ChangeoverTime; 
    ++counter; 
}); 


maxchangeOverTimes = bottleneck.Item2.max=(entry => entry.ChangeoverTime); 

changeovertime.ChangeoverTimes.AddAll(bottleneck.Item2.select(entry => new new ChangeOverDateValue 
        { 
         ChangeoverValue = entry.ChangeoverTime, 
         Color = ChangeOverTimeToColor(entry.ChangeoverTime), 
         StartTime = entry.StartTime 
        })); 

das alles ist, ich mit mir kommen können

0

Vielleicht ...

weitere Informationen oder meine Entwicklung envirment, ohne dass diese
var avarangechangeOverTimes = bottleneck.Item2 
            .Where(entry => entry.ChangeOverTime > 0) 
            .Sum(entry => entry.ChangeOverTime); 

var maxchangeOverTimes = bottleneck.Item2 
            .Max(entry => entry.ChangeOverTime); 

bottleneck.Item2.ToList() 
     .ForEach(entry => changeovertime.ChangeoverTimes.Add 
            (
             new ChangeOverDateValue { 
              ChangeoverValue = entry.ChangeoverTime, 
              Color = ChangeOverTimeToColor(entry.ChangeoverTime), 
              StartTime = entry.StartTime 
             } 

            ) 
            ); 
0

Versuchen:

var averagechangeOverTimes = bottleneck.Item2 
             .Where(entry => entry.ChangeoverTime > 0) 
             .Sum(entry => entry.ChangeoverTime); 

counter = bottleneck.Item2.Count(entry => entry.ChangeoverTime > 0); 

var maxchangeOverTimes = bottleneck.Item2.Max(entry => entry.ChangeoverTimes); 

changeovertime.ChangeoverTime.Add(bottleneck.Item2 
              .Select(entry => new ChangeOverDateValue{ 
                 ChangeoverValue = entry.ChangeoverTime, 
                 Color = ChangeOverTimeToColor(entry.ChangeoverTime), 
                 StartTime = entry.StartTime 
                 });