IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: List<> triedenie podla datumu

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
RooBoo
Člen
Avatar
RooBoo:1.8.2021 11:27

Ahojte, chcel by som sa opýtať na radu. Mám

List<Report>

, kde ukladám reporty ktoré majú 2 properties. Value a Date.
V liste sú niektotré reporty ktoré majú rovnaký dátum. Ja by som potreboval ich zlúčiť.

Report1= 13 , 02.07.2021
Report2= 120 , 04.07.2021
Report3= 8 , 04.07.2021
Report4= 17 , 04.07.2021

a ja potrebujem dostať

Report1= 13 , 02.07.2021
Report2= 145 , 04.07.2021

Jedná sa mi o môj program ktorý používam v mojom servise a chcem vykresliť graf tržieb. A v jeden deň, mám viac predaja a trzby niekedy žiaden.
Viem si vyselektovať reporty z databázy za isté obdobie do listu, následne by som chcel takto spojiť jednotlivé dni a potom pomocou

foreach(report in FinallReporst)
{
        chart1.Series[""].Points.AddXY(report.Value,report.Date );
}

prejdem výsledný list.

 
Odpovědět
1.8.2021 11:27
Avatar
David Flieger:2.8.2021 7:51

Trochu jsem nad tím uvažoval a jedno z řešení by mohlo aspoň zhruba vypadat takto:

public List<Report> GroupByDate(List<Report> reports){
List<DateTime> usedDates = new List<DateTime>();
List<Report> grouped = new List<Report>();
int value;
for(int i = 0; i<= reports.Count; i++){
if(!usedDates.Contains(reports[i].Date)){
value =0;
for(int j = i; j <= reports.Count; j++){
if ( reports[j].Date == reports[i].Date ){
value =+ reports[j];
}
usedDates.Add(reports[i].Date);
grouped.Add(new Report(value, reports[i].Date));
}
}
}
}

Snad je to v pořádku. Případně to lze udělat jako Extension metodu.

 
Nahoru Odpovědět
2.8.2021 7:51
Avatar
RooBoo
Člen
Avatar
Odpovídá na David Flieger
RooBoo:2.8.2021 13:24

Ďakujem veľmi pekne za radu. Vyskúšam to.

 
Nahoru Odpovědět
2.8.2021 13:24
Avatar
Ghst
Člen
Avatar
Odpovídá na RooBoo
Ghst:2.8.2021 14:50

Mohl bys to řešit více způsoby:

  • co ti brání vytáhnout si to z DB již seskupené?
  • použít Dictionary s klíčem datetime, kdy si provedeš kontrolu, jestli existuje daný datum, a pokud klíč existuje, hodnotu přičteš, jiank zakládáš nový.
  • před vložením do grafu si aktuální kolekci "transformuješ" do potřebné podoby (před vložením do grafu uděláš GroupBy a Sum)
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
2.8.2021 14:50
Avatar
Ghst
Člen
Avatar
Odpovídá na Ghst
Ghst:2.8.2021 14:55

Například pomocí Linq seskupíš kolekci takto

var grpReporty = reporty.GroupBy(g => g.date).Select(s => new { date = s.Key.Date,value = s.Sum(x => x.value)});
Editováno 2.8.2021 14:56
 
Nahoru Odpovědět
2.8.2021 14:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.