Maison > développement back-end > C++ > Comment puis-je créer une clause WHERE dynamique dans LINQ pour filtrer les données en fonction des entrées de l'utilisateur ?

Comment puis-je créer une clause WHERE dynamique dans LINQ pour filtrer les données en fonction des entrées de l'utilisateur ?

Linda Hamilton
Libérer: 2025-01-14 07:19:47
original
999 Les gens l'ont consulté

How Can I Build a Dynamic WHERE Clause in LINQ to Filter Data Based on User Input?

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal