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>
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>
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!