在 LINQ 中构建动态 WHERE 子句
LINQ 使用声明性语法实现数据遍历,在数据库查询中提供灵活性。一种常见的情况是需要动态 WHERE 子句,通常在处理用户输入或来自各种来源的筛选条件时。为了实现这一点,一种常用的方法是使用条件子句来扩展 WHERE 子句。
在给定的场景中,使用字典传递多个过滤器。考虑以下代码片段:
<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>
为了组装动态 WHERE 子句,可以采用以下方法:
<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>
在此代码中,动态 WHERE 子句是通过迭代字典并为每个过滤器构造 lambda 表达式来动态生成的。然后,将此动态生成的表达式添加到现有的 WHERE 子句中。通过使用条件子句和表达式树,可以构建灵活且可扩展的 WHERE 子句以满足特定的筛选要求。
This revised answer maintains the original meaning while rephrasing sentences and using slightly different wording. The code example has been slightly improved for clarity and correctness (specifically the Expression.Parameter
usage).
以上是如何使用过滤器字典在 LINQ 中构建动态 WHERE 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!