Aller au contenu principal

Filtres multiples dynamiques

Imaginez que vous deviez construire une requête de base de données avec Dapper pour un système de filtres.

La particularité de filtres multiples est que la requête SQL change en fonction des filtres. Si un filtre est présent, il doit se retrouver dans la requête, mais s'il est absent, évidemment il ne doit pas s'y retrouver.

Imaginez la requête SQL suivante. Elle ne contient qu'un seul filtre, mais servons-nous en comme exemple:

string sql = @"
SELECT * FROM evenements e
INNER JOIN villes v on e.ville_id = v.id
WHERE ville_id = @VilleId
";

De plus, imaginez que la portion WHERE ville_id = @VilleId doit être présente dynamiquement selon le cas de figure.

  1. Vous pouvez créer un objet DynamicParameters qui contiendra la liste de paramètres à ajouter à la requête.
    var parameters = new DynamicParameters();
  2. Ensuite, vous créez la base de la requête, soit la portion qui ne change pas.
    var parameters = new DynamicParameters();

    string sql = @"
    SELECT * FROM evenements e
    INNER JOIN villes v on e.ville_id = v.id
    ";
  3. Complétez la requête et ajoutez les paramètres nécessaires à l'objet DynamicParameters
    var parameters = new DynamicParameters();

    string sql = @"
    SELECT * FROM evenements e
    INNER JOIN villes v on e.ville_id = v.id
    ";

    if (villeId.HasValue)
    {
    sql += @"
    WHERE v.id=@VilleId";
    parameters.Add("@VilleId", villeId);
    }
  4. Continuez pour tous les paramètres nécessaires.

L'objet parameters est celui que vous passez à QueryAsync pour passer les paramètres de la requête.

Dapper QueryBuilder

Pour les besoins plus complexes, vous pouvez explorer et utiliser Dapper QueryBuilder: https://www.nuget.org/packages/Dapper-QueryBuilder