Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Contare dati

  1. #1

    Contare dati

    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

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Potresti mettere nel metodo una

    If campo.contains("anno") etc per tutti i tipi,

    Al posto della switch, passandogli stringhe composte..

  3. #3
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,521
    EDIT:
    La soluzione proposta mi sa che era troppo complessa... cancellata!
    Ultima modifica di U235; 23-07-2022 a 00:01

  4. #4

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.