Clause WHERE dynamique dans LINQ : création de filtres conditionnels
Dans les requêtes LINQ, il est souvent nécessaire d'ajuster dynamiquement la clause WHERE en fonction des entrées de l'utilisateur ou des variables d'exécution. Par exemple, considérons une case à cocher de formulaire qui filtre les données en fonction des entrées de l'utilisateur dans une requête LINQ transmise sous forme de dictionnaire
Créer un filtre dynamique :
Pour assembler des clauses WHERE dynamiques, nous pouvons profiter de la flexibilité des expressions lambda LINQ. En utilisant la méthode ".Where()", nous pouvons concaténer plusieurs critères de filtre basés sur le dictionnaire fourni. Pour chaque paire clé-valeur, nous construisons un prédicat pour vérifier si l'attribut correspond à la valeur spécifiée.
Exemple :
<code class="language-csharp">var q = from c in db.ProductDetail where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName // 在此处插入动态过滤器 select c; foreach (var kvp in filterDictionary) { // 为每一对键值对创建一个 lambda 表达式 Expression<Func<ProductDetail, bool>> predicate = (p => kvp.Key == null || p.GetType().GetProperty(kvp.Key).GetValue(p) != null && (kvp.Value == null || kvp.Value.Contains( p.GetType().GetProperty(kvp.Key).GetValue(p).ToString()))); // 将谓词链接到查询 q = q.Where(predicate); } q = q.OrderBy(c => c.ProductTypeName);</code>
Prédicat de lien :
Dans les scénarios où plusieurs filtres doivent être appliqués séquentiellement, comme le filtrage par plage de dates, nous pouvons enchaîner des clauses ".Where()" supplémentaires pour affiner les conditions de la requête. Cette approche permet un filtrage dynamique basé sur des paramètres définis par l'utilisateur.
Exemple de code :
<code class="language-csharp">var votes = db.Votes.Where(r => r.SurveyID == surveyId); if (fromDate != null) { votes = votes.Where(r => r.VoteDate.Value >= fromDate); } if (toDate != null) { votes = votes.Where(r => r.VoteDate.Value <= toDate); }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!