Plusieurs FrameWorks nous permettent d’améliorer les fonctions de filtre natives. Je tenais à vous présenter la bibliothèque fluentQuery de Malcolm Groves : GitHub
FluentQuery permet de découpler les possibilités de la liste générique. Certains développeurs trouveront un air de ressemblance avec les requêtes SQL.
Nous allons nous focaliser sur l’utilisation d’un filtre basique sur notre liste en utilisant une des fonctionnalités de base du fluentQuery.
Le fluentQuery retourne une liste filtrée d’items que nous allons parcourir dans une boucle « forin » afin d’appliquer le traitement adéquat sur les items sélectionnés. Bien évidemment, ce n’est pas une obligation de parcourir les items dans une boucle forin, nous pourrions stocker les items dans une autre liste, ….
Reprenons notre exemple, cette fois nous voulons tous les fruits pesant plus de 130grs de notre panier.
Voici le résultat de la procédure :
– TBanane Banane 150grs
– TOrange Orange 200grs
Décortiquons notre requête :
GenericQuery<TFruit> : on indique sur quel type nous travaillons, ici des fruits
.Select.From(Panier) : nous allons sélectionner des items dans la liste « panier »
.Where(function (item : TFruit) : boolean) : pour lesquels ce prédicat devra nous retourner « true »
Dans l’exemple que nous venons de présenter, le plus important est le prédicat (fonction booléen). Cette fonction doit retourner true pour retourner l’item, false lorsque l’on souhaite l’écarter. Le prédicat a un paramètre « item » qui est du type de notre liste (ici c’est un fruit). Grâce à l’item, nous pouvons tester toutes les propriétés, appeler les méthodes et fonctions de cette classe, combiner les critères, ….