2013-02-07 3 views
1

Mon VS2010 en utilisant ReSharper qui invite à convertir foreach en LINQ. Il convertit deConversion automatique avec LINQ

foreach (var item in quotePrice.ExtraServiceBreakdown) 
{ 
    hazmatRate = (quoteRequest.IsHazMat && item.Id == VitranHazmatCode) ? 
               item.Cost : hazmatRate; 
} 

à

hazmatRate = quotePrice.ExtraServiceBreakdown.Aggregate(
       hazmatRate, (current, item) => 
        (quoteRequest.IsHazMat && item.Id == VitranHazmatCode) ? 
         item.Cost : current); 

J'ai deux questions ici,

  1. Qu'est-current voulait dire? Est-ce que cela pointe vers la variable hazmatRate?
  2. Que fait réellement Aggregate?
+1

Le problème est que vous définissez une variable dans un 'foreach' sans la casser, d'où votre toujours l'écraser. Ce n'est pas efficace et peut-être sujet aux erreurs (si vous ne voulez pas la dernière valeur). –

+0

À la question 2, avez-vous essayé de lire la documentation sur Agrégat? –

+0

@TimSchmelter, pouvez-vous expliquer un peu plus avec cela? ** sans le casser, ** – DON

Répondre

1
  1. actuel point de bien à votre Hazmat
  2. LINQ Aggregate algorithm explained

Et je pense que vous devez faire comme indiqué dans le commentaire de Tim:

hazmatRate += (quoteRequest.IsHazMat && item.Id == VitranHazmatCode) ? item.Cost : hazmatRate; 

Mais dans ce cas je changerais 'hazmatRate' par un taux de base déclaré avant votre fonction. Sinon, vous augmenteriez votre valeur avec la valeur qu'elle contenait avant de la faire croître exponentiellement.