Home >Backend Development >C++ >How Can I Build a Dynamic WHERE Clause in LINQ to Filter Data Based on User Input?

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

Linda Hamilton
Linda HamiltonOriginal
2025-01-14 07:19:47995browse

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

Dynamic WHERE clause in LINQ: Creating conditional filters

In LINQ queries, it is often necessary to dynamically adjust the WHERE clause based on user input or runtime variables. For example, consider a form checkbox that filters data based on user input in a LINQ query passed as a Dictionary>.

Build a dynamic filter:

To assemble dynamic WHERE clauses, we can take advantage of the flexibility of LINQ lambda expressions. By using the ".Where()" method we can concatenate multiple filter criteria based on the provided dictionary. For each key-value pair, we build a predicate to check whether the attribute matches the specified value.

Example:

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

Link predicate:

In scenarios where multiple filters need to be applied sequentially, such as date range filtering, we can chain additional ".Where()" clauses to refine the conditions of the query. This approach allows dynamic filtering based on user-defined parameters.

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

The above is the detailed content of How Can I Build a Dynamic WHERE Clause in LINQ to Filter Data Based on User Input?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn