Maison > développement back-end > C++ > Comment créer une clause WHERE dynamique dans LINQ à l'aide d'un dictionnaire de filtres ?

Comment créer une clause WHERE dynamique dans LINQ à l'aide d'un dictionnaire de filtres ?

Patricia Arquette
Libérer: 2025-01-14 08:32:46
original
240 Les gens l'ont consulté

How to Build a Dynamic WHERE Clause in LINQ Using a Dictionary of Filters?

Création de clauses WHERE dynamiques dans LINQ

LINQ utilise une syntaxe déclarative pour le parcours des données, offrant ainsi une flexibilité dans les requêtes de base de données. Une situation courante est celle où une clause WHERE dynamique est requise, généralement lors du traitement des entrées utilisateur ou des conditions de filtrage provenant de diverses sources. Pour y parvenir, une approche courante consiste à étendre la clause WHERE avec une clause conditionnelle.

Dans un scénario donné, utilisez un dictionnaire pour passer plusieurs filtres. Considérez l'extrait de code suivant :

<code class="language-csharp">public IOrderedQueryable<productdetail> GetProductList(string productGroupName, string productTypeName, Dictionary<string, List<string>> filterDictionary)
{
    var q = from c in db.ProductDetail
            where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName
            // 在此处插入动态过滤器
            orderby c.ProductTypeName
            select c;
    return q;
}</code>
Copier après la connexion

Pour assembler une clause WHERE dynamique, l'approche suivante peut être utilisée :

<code class="language-csharp">if (filterDictionary != null)
{
    foreach (var filter in filterDictionary)
    {
        string fieldName = filter.Key;
        foreach (string value in filter.Value)
        {
            var innerWhereClause = Expression.Lambda<Func<ProductDetail, bool>>(
                Expression.Equal(Expression.Property(Expression.Parameter(typeof(ProductDetail), "c"), fieldName),
                Expression.Constant(value)),
                Expression.Parameter(typeof(ProductDetail), "c"));

            q = q.Where(innerWhereClause);
        }
    }
}</code>
Copier après la connexion

Dans ce code, la clause WHERE dynamique est générée dynamiquement en itérant sur le dictionnaire et en construisant une expression lambda pour chaque filtre. Ensuite, ajoutez cette expression générée dynamiquement à la clause WHERE existante. En utilisant des clauses conditionnelles et des arborescences d'expressions, vous pouvez créer des clauses WHERE flexibles et extensibles pour répondre à des exigences de filtrage spécifiques.

Cette réponse révisée conserve le sens original tout en reformulant les phrases et en utilisant une formulation légèrement différente. L'exemple de code a été légèrement amélioré pour plus de clarté et d'exactitude (en particulier l'utilisation Expression.Parameter).

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