Bonjour,
J'ai rencontré pas mal de fois un même cas de figure donc je me suis dis qu'il devait y avoir une best practice voir un pattern.
En effet, il n'est pas rare d'avoir une source de donnée (ex: une base de donnée) et de devoir filtrer un resultat (ex: requête sql/linq) selon des paramètres( ex: champs, colonnes) variables et dynamique, on peut également vouloir afficher le résultat en affichant que certains attributs.
Prenons un exemple concret.
On a une gridview et une série de filtre sur chaque champ de la base de données. Les filtres peuvent être utilisés ou non.
Typiquement le code ressemble à ceci :
La gestion du WHERE peut vite devenir compliqué avec les ET et les OU. Pareil pour rendre le SELECT dynamique en fonction des champs que l'on veut voir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 string request = " SELECT FieldA, FieldB, ... FROM TABLE WHERE "; if (!string.IsNullOrEmpty(field1)) requete += String.Format(" FIELDA = {0}", field1); if (!string.IsNullOrEmpty(field2)) requete += String.Format(" FIELDB = {0}", field2); ....
La gestion de se long string qui est la requête est affreuse et difficilement maintenable pour les grosses requetes
De mon expérience, j'aurai tendance à créer une classe TableSelector, de manière à rendre ca plus facilement maintenant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class TableSelector { private EnumerableRowCollection<DataRow> _queryLINQ; // dans le cas de linq private string _querySQL;// dans le cas de sql public void AddFilter(string column, string value) { _queryLINQ = from x in Tables where x.fields[column] = value; } public List<> GetResult(Array<string> column) }
J'aimerais connaitre votre façon de faire, vos avis, si vous avez des discussions ou des blogs la dessus etc ...
Merci :-)
Partager