2014-09-07 1 views
-4

J'ai une collection d'un objet avec un DateTime et une propriété décimale. Toutes les dates de la collection sont uniques et triées pour être séquentielles.LINQ - Itérer sur une collection de dates et effectuer un calcul

public class RateChange 
{ 
    public DateTime EffectiveDate { get; set; } 
    public decimal Rate { get; set; } 
} 

En supposant que le premier changement de taux est la date de début et la date de fin est le DateTime.UtcNow courant. Comment puis-je itérer sur cette collection et multiplier le Rate * Days entre chaque date, puis additionner le total de ces résultats en utilisant uniquement LINQ.

+0

Qu'avez-vous essayé? – barrick

+0

Non ce n'est pas les devoirs. Je sais comment travailler les jours entre deux dates et multiplier par un nombre! Mon problème est que je ne sais pas comment exprimer cela en utilisant seulement LINQ sur ma collection. Pour être plus précis c'est un transformateur de résultat qui transforme les résultats d'un index de base de données, qui s'exécute sur le serveur RavenDB. Ces transformateurs doivent être codés en utilisant LINQ. – JCoder23

Répondre

2

Quelque chose comme ça ...

rateChanges 
    .Zip(rateChanges 
      .Skip(1) 
      .Concat(new[]{ 
       new RateChange{ 
        EffectiveDate = DateTime.Now.Date, 
        Rate = 0M //we never use this 
       } 
      }), 
     (r1, r2) => r1.Rate * (r2 - r1).TotalDays) 
    .Sum(); 

En raison de la double itération de rateChanges, il est probablement préférable de vous assurer qu'il est une collection matérialisée tels que tableau ou List<RateChange>

+0

Merci, cela fonctionne super bien! – JCoder23

Questions connexes