Sumowanie elementów listy

0

Cześć, mam zbiór danych (wrzuciłem jako załącznik). Są to dwie serie danych. Chciałbym je zsumować (niezależnie czy będą to dwie serie czy n serii zawsze chciałbym zsumować wartości 'cost' po dacie, tak żeby w rezultacie mieć wynikowo tabelę, która będzie miała daty oraz zsumowane wartości cost). Między innymi problem polega na tym, że serie mogą być różnych długości, tak jak w załączniku.
Generalnie na ten moment w C# wrzucam sobie te serie danych do listy jako oddzielne elementy i teraz chciałbym je posumować po dacie. Jak mogę to zrobić?

Dodam, że głównym problemem jest to, że chciałbym, żeby te elementy z list się przeplatały tzn jesli w jednej z nich nie ma danej z np godziny 15, a w drugiej jest, to żeby wynikowo ta 15 mimo wszystko była. Dlatego chyba tutaj sumowanie z użyciem linq po kluczu (jako dacie) nie spełni oczekiwań?

2

Ja bym posortował obie listy po czasie, a potem je scalił tak jak to robi się w algorytmie sortowania przez scalanie. Spoiler alert, w takim sam sposób relacyjne bazy danych robią joina na posortowanych kolumnach, operator: mergejoin. A mówią że znajomość algorytmów sortowania się nie przydaje :D

0

O ile dobrze Cię zrozumiałem

 class Data
    {
        public DateTime Date { get; set; }
        public double Cost { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {

            var l1 = new List<Data>
            {
                new Data{ Date= new DateTime(2011,1,1), Cost= 200},
                new Data{ Date= new DateTime(2011,1,2), Cost= 201},
                new Data{ Date= new DateTime(2011,1,3), Cost= 202},
                new Data{ Date= new DateTime(2011,1,4), Cost= 203},
                new Data{ Date= new DateTime(2011,1,5), Cost= 204},
                new Data{ Date= new DateTime(2011,1,6), Cost= 206},

            };
            var l2 = new List<Data>
            {
                new Data{ Date= new DateTime(2011,1,1), Cost= 2110},
                new Data{ Date= new DateTime(2011,1,2), Cost= 20421},
                new Data{ Date= new DateTime(2011,1,3), Cost= 25303},
                new Data{ Date= new DateTime(2011,1,7), Cost= 20425},
                new Data{ Date= new DateTime(2011,1,8), Cost= 20536},

            };

            var listOfList = new List<List<Data>> { l1, l2 };

            var result=listOfList.SelectMany(o => o).GroupBy(o => o.Date).Select(o => new Data { Date = o.Key, Cost = o.Sum(o => o.Cost) });
            

        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1