Ciao
ho una classe che contiene i dati strutturata così
codice:
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
codice:
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

codice:
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