LINQ 中的动态 WHERE 子句:创建条件过滤器
在 LINQ 查询中,经常需要根据用户输入或运行时变量动态调整 WHERE 子句。例如,考虑表单复选框根据作为 Dictionary
构建动态过滤器:
为了组装动态 WHERE 子句,我们可以利用 LINQ lambda 表达式的灵活性。通过使用“.Where()”方法,我们可以根据提供的字典连接多个过滤条件。对于每一对键值对,我们构建一个谓词来检查属性是否与指定的值匹配。
示例:
<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>
链接谓词:
在需要按顺序应用多个过滤器的场景中,例如日期范围过滤,我们可以链接额外的“.Where()”子句来细化查询的条件。这种方法允许根据用户定义的参数进行动态过滤。
示例代码:
<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>
以上是如何在 LINQ 中构建动态 WHERE 子句以根据用户输入过滤数据?的详细内容。更多信息请关注PHP中文网其他相关文章!