Jeg har svært ved at forstå helt præcist problemstillingen - eller rettere hvad er dit input og dit ønskede output.
Er inputtet altid kun 2 perioder; det lyder det ikke som om? Er hele "året" altid dækket? Eller sagt på en anden måde er en periode altid inden for intervallet af en anden periode? F.eks. som 1/5-2015-30/06-2015 ligger fuldstændig inden for 1/1-2015 - 31/12-2015.
På grund af dette er vigtigt at vide om der kun er 2 perioder i inputtet, for ellers hvad sker der hvis der er mere end 2 perioder der overlapper? Hvis ikke, er alle perioderne (undtagen en som dækker alle) adskilte, dvs. de overlapper ikke?
Baseret på dit eksempel virker det som om at for inputtet er det ligemeget hvilken periode der er forbundet med hvilken værdi? Kun rækkefølgen af værdierne har betydning her; rækkefølgen af perioder kunne være ligemeget. F.eks er 684 i input forbundet med maj-juni mens det i outputtet forholder sig omvendt.
Kan starte med at sige jeg har selv løst det, fordi det viste sig at data var totalt upålidelige - så kan ikke vide noget som helst.
Havde håbet jeg kunne lave noget LINQ select med nogle nye objekter og noget distinct, men var ikke muligt - så det bliver kørt i hånden.
Problemet var at jeg får et udefineret antal perioder, med som kan overlappe flere gange. Den øverste skal derfor dække den periode der ikke er taget, og sådan fremdeles.
Et eksempel:
01/02 - 15/05 med værdi 684
10/05 - 08/06 med værdi 354
20/01 - 30/08 med værdi 711
01/03 - 30/05 med værdi 321
01/05 - 10/10 med værdi 455
04/04 - 05/05 med værdi 655
10/01 - 31/12 med værdi 477
01/01 - 03/03 med værdi 722
Her skal så fyldes hele året ud med perioder, som ikke allerede er dækket.
Så første periode er ikke dækket og giver derfor
01/02 - 15/05 med værdi 684
Dette giver listen:
01/02 - 15/05 med værdi 684
Næste periode er dækket af noget af perioden, så derfor bliver den del der er dækket fjernet og giver
16/05 - 08/06 med værdi 354
Dette giver listen:
01/02 - 15/05 med værdi 684
16/05 - 08/06 med værdi 354
Næste periode er dækket både før og efter og giver derfor en opdeling i to dele:
20/01 - 31/01 med værdi 711
09/06 - 30/08 med værdi 711
Dette giver listen:
01/02 - 15/05 med værdi 684
16/05 - 08/06 med værdi 354
20/01 - 31/01 med værdi 711
09/06 - 30/08 med værdi 711
Næste periode er fuldt dækket og springes over (01/03 - 30/05 med værdi 321)
Næste periode er delvist dækket og deles op
01/09 - 10/10 med værdi 455
Dette giver listen:
01/02 - 15/05 med værdi 684
16/05 - 08/06 med værdi 354
20/01 - 31/01 med værdi 711
09/06 - 30/08 med værdi 711
01/09 - 10/10 med værdi 455
Næste periode er fuldt dækket og springes over (04/04 - 05/05 med værdi 655)
Næste periode dækker både før og efter og skal derfor deles i to
10/01 - 31/01 med værdi 477
11/10 - 31/12 med værdi 477
Dette giver listen:
01/02 - 15/05 med værdi 684
16/05 - 08/06 med værdi 354
20/01 - 31/01 med værdi 711
09/06 - 30/08 med værdi 711
01/09 - 10/10 med værdi 455
10/01 - 31/01 med værdi 477
11/10 - 31/12 med værdi 477
Sidste periode giver følgende
01/01 - 09/01 med værdi 722
Dette giver listen:
01/02 - 15/05 med værdi 684
16/05 - 08/06 med værdi 354
20/01 - 31/01 med værdi 711
09/06 - 30/08 med værdi 711
01/09 - 10/10 med værdi 455
10/01 - 31/01 med værdi 477
11/10 - 31/12 med værdi 477
01/01 - 09/01 med værdi 722
Som det ses så kommer perioderne ikke i rækkefølge, og overlapper gerne hinanden.
Så de skal splittes så man dækker det som ikke er dækket, og så bagefter sorteres så de kommer i rækkefølge for året.