Dynamische WHERE-Klausel in LINQ: Bedingte Filter erstellen
In LINQ-Abfragen ist es oft notwendig, die WHERE-Klausel basierend auf Benutzereingaben oder Laufzeitvariablen dynamisch anzupassen. Betrachten Sie beispielsweise ein Formular-Kontrollkästchen, das Daten basierend auf Benutzereingaben in einer LINQ-Abfrage filtert, die als Dictionary
Erstellen Sie einen dynamischen Filter:
Um dynamische WHERE-Klauseln zusammenzustellen, können wir die Flexibilität von LINQ-Lambda-Ausdrücken nutzen. Mithilfe der Methode „.Where()“ können wir mehrere Filterkriterien basierend auf dem bereitgestellten Wörterbuch verketten. Für jedes Schlüssel-Wert-Paar erstellen wir ein Prädikat, um zu prüfen, ob das Attribut mit dem angegebenen Wert übereinstimmt.
Beispiel:
<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-Prädikat:
In Szenarien, in denen mehrere Filter nacheinander angewendet werden müssen, wie etwa bei der Datumsbereichsfilterung, können wir zusätzliche „.Where()“-Klauseln verketten, um die Bedingungen der Abfrage zu verfeinern. Dieser Ansatz ermöglicht eine dynamische Filterung basierend auf benutzerdefinierten Parametern.
Beispielcode:
<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>
Das obige ist der detaillierte Inhalt vonWie kann ich in LINQ eine dynamische WHERE-Klausel erstellen, um Daten basierend auf Benutzereingaben zu filtern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!