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中文網其他相關文章!