Quale struttura di raccolta dovrei usare per il raggruppamento parametrico ordinando in c #?

1

Ho varie applicazioni di Windows Form che contengono vari controlli che creano clausole "group by" e "where" personalizzate per i miei metodi di classe.

Sto pensando di passare una struttura di raccolta di qualche tipo in modo che i metodi siano in grado di costruire le clausole group by e where.

Diciamo una lista contenente il campo e il valore per il gruppo di o dove.

Sto andando nella giusta direzione?

Aggiornamento:

Non ho ancora il codice ma lasciami provare a spiegare meglio:

  1. Abbiamo un modulo con 10 elenchi a discesa e un segno di spunta accanto a loro.
  2. Inoltre abbiamo adatagrid sul modulo.
  3. Ogni elenco a discesa corrisponde a un campo in una tabella.

    • Se un elenco a discesa ha la sua casella di controllo selezionata significa che deve essere parte della clausola group by nella dichiarazione select.

    • Il valore del dropdownlist deve essere parte della clausola where.

* nota: * un'altra applicazione potrebbe avere numeri diversi di dropdownbox e diversi campi corrispondenti.

Voglio creare un metodo comune che recuperi i dati con le clausole group e where selezionabili dall'utente.

Quindi quello che penso è di passare agli elenchi del metodo 2

  • Uno con (nomecampo, valore) per le clausole where

  • E uno con (nomecampo) per il gruppo di

a seconda della logica sopra ...

Spero che questo sia più chiaro.

    
posta e4rthdog 18.04.2012 - 12:28
fonte

2 risposte

3

Hai considerato l'utilizzo di LINQ / un albero di espressione? Sembra che corrisponda esattamente al tuo problema, a meno che non mi sia sfuggito qualcosa.

Qualunque sia il dettaglio del particolare tipo di collezione, purché sia numerabile, puoi utilizzare tutti i vantaggi di LINQ. Hai l'origine dati della tua gridview (o qualunque sia l'origine dati); è quindi possibile allegare eventi alle caselle di controllo / elenchi a discesa che aggiungono / rimuovono where / group-by in base al legame che hanno con i campi nel database.

Personalmente, progetterei anche il sistema senza molta considerazione del meccanismo di persistenza, vuoi un modello di astrazione di facile comprensione ad ogni livello, è raro che lo stesso modello sia appropriato in diversi livelli.

Suppongo che tu stia utilizzando almeno C # 3.

    
risposta data 18.04.2012 - 17:12
fonte
2

La logica per Group By è molto complessa. Innanzitutto, dovresti chiederti, è questo qualcosa che ti serve / ha le risorse per programmare da solo, o è meglio usare uno strumento per questo? Ad esempio, se si raggruppa per un timestamp, è possibile decidere di raggruppare solo per data, ore e minuti e ignorare il resto. Devi anche usare i valori dei dati reali e non le stringhe formattate, ecc.

Ci sono strumenti di terze parti che ti aiutano a farlo in modo semplice, facile e forniscono grandi effetti GUI come il trascinamento delle colonne della griglia in un'area di raggruppamento (molto simile a Outlook).

Ora, se hai deciso di farlo da solo, ti suggerisco di eseguire il raggruppamento nel database non sul client. Ci sono molte ragioni per questo, come:

  • Ciò ti consente di non preoccuparti della gestione della memoria per elenchi di grandi dimensioni

  • Coding e testing saranno semplificati

  • Non devi preoccuparti dei tipi di dati in confronto o nei filtri

  • Riceverai dati aggiornati

Andando avanti con questo approccio, puoi chiedere all'utente di selezionare il gruppo per campi e ogni campo selezionato può essere usato per costruire una stringa. Quando l'utente seleziona tutti i campi desiderati, si finisce con una stringa del tipo:

"Paese, sesso, età"

Fai lo stesso per la condizione di raggruppamento (MS Access ad esempio ha un generatore di espressioni che ritengo non sia necessario, ma aiuta l'utente a costruire un'espressione) e alla fine finisce con una stringa come:

"Età > 12"

Ora puoi inserire queste stringhe nella tua query di selezione originale per ottenere:

SELEZIONA ... GROUP BY Paese, Sesso, Età HAVING Age > 12

L'altra parte difficile è capire che cosa il tuo utente vuole fare con il gruppo. In genere si desidera eseguire una funzione di aggregazione come SUM o COUNT nel gruppo. Quindi devi tenerne conto anche.

    
risposta data 18.04.2012 - 14:47
fonte

Leggi altre domande sui tag