Ciao
ho una classe che contiene i dati strutturata così
public class Turno
{
public string? Nome { get; set; }
public string? Qualifica { get; set; }
public DateTimeOffset? Inizio { get; set; }
public DateTimeOffset? Fine { get; set; }
public bool Cambio { get; set; }
public bool Autorizzato { get; set; }
}
mi viene passato tramite stringa un dato che serve ad ottenere dalla classe sopra i seguenti dati
public class Conteggio
{
public string? Dato { get; set; }
public int Valore { get; set; }
public double Ore { get; set; }
}
il dato passato in stringa è tipo Anno Mese Autorizzato e altri come sotto
quindi faccio questo
public static List<Conteggio> Conteggio(string Campo)
{
var r = new Dictionary<string, Conteggio>();
foreach (var turno in Context.Turni)
switch (Campo)
{
case "Anno":
{
conta(r, turno.Inizio?.Year.ToString(), turno);
break;
}
case "Autorizzato":
{
conta(r, turno.Autorizzato ? " Autorizzato " : " Non Autorizzzato ", turno);
break;
}
case "Nome":
{
conta(r, turno.Nome, turno);
break;
}
case "Cambio":
{
conta(r, turno.Cambio ? turno.Inizio == turno.Fine ? " Chiesto cambio " : " Dato cambio " : " Nessun cambio ", turno);
break;
}
case "Mese":
{
conta(r, turno.Inizio?.Month.ToString(), turno);
break;
}
case "Qualifica":
{
conta(r, turno.Qualifica, turno);
break;
}
}
return r?.Values.ToList();
}
static void conta(Dictionary<string, Conteggio> Dict, string dato, Turno turno)
{
if (!Dict.Keys.Contains(dato))
Dict.Add(dato, new Conteggio() { Dato = dato });
Dict[dato].Valore++;
Dict[dato].Ore += (turno.Fine.Value.Subtract(turno.Inizio.Value).TotalHours);
}
funziona e li conto
non è il massimo ma ho già una idea per farlo meglio ma non è questo il problema
il problema è che voglio contare diversi campi con diverse combinazioni
tipo voglio contare tutti quelli autorizzati o non autorizzati nei diversi mesi
quindi ad esempio [novembre-autorizzati] valore=2 ore=10 [novembre-non autorizzati] valore=3 ore=10 [dicembre-autorizzati] valore=4 ore=16 ecc.
valore è il numero totale conteggiati e ore è il numero di ore fatte
ma non solo con due campi ma un numero e una combinazione definito dalla stringa che ricevo
può essere [anno-autorizzati] [anno-mese-autorizzati] [mese-qualifica-anno] con tutte le combinazioni
Come faccio? devo prevedere tutti i casi nel codice o esiste un altro modo?
grazie in anticipo a tutti quelli che mi vogliono rispondere