首頁 > 後端開發 > C++ > 如何在 LINQ 中建立動態 WHERE 子句以根據使用者輸入過濾資料?

如何在 LINQ 中建立動態 WHERE 子句以根據使用者輸入過濾資料?

Linda Hamilton
發布: 2025-01-14 07:19:47
原創
998 人瀏覽過

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

LINQ 中的動態 WHERE 子句:建立條件過濾器

在 LINQ 查詢中,經常需要根據使用者輸入或執行時間變數動態調整 WHERE 子句。例如,考慮表單複選框根據作為 Dictionary> 傳遞的 LINQ 查詢中的使用者輸入篩選資料的情況。

建立動態過濾器:

為了組裝動態 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板