Erstellen dynamischer WHERE-Klauseln in LINQ
LINQ verwendet deklarative Syntax für die Datendurchquerung und bietet so Flexibilität bei Datenbankabfragen. Eine häufige Situation besteht darin, dass eine dynamische WHERE-Klausel erforderlich ist, normalerweise bei der Verarbeitung von Benutzereingaben oder Filterbedingungen aus verschiedenen Quellen. Um dies zu erreichen, besteht ein gängiger Ansatz darin, die WHERE-Klausel um eine Bedingungsklausel zu erweitern.
Verwenden Sie in einem bestimmten Szenario ein Wörterbuch, um mehrere Filter zu übergeben. Betrachten Sie den folgenden Codeausschnitt:
<code class="language-csharp">public IOrderedQueryable<productdetail> GetProductList(string productGroupName, string productTypeName, Dictionary<string, List<string>> filterDictionary) { var q = from c in db.ProductDetail where c.ProductGroupName == productGroupName && c.ProductTypeName == productTypeName // 在此处插入动态过滤器 orderby c.ProductTypeName select c; return q; }</code>
Um eine dynamische WHERE-Klausel zusammenzustellen, kann der folgende Ansatz verwendet werden:
<code class="language-csharp">if (filterDictionary != null) { foreach (var filter in filterDictionary) { string fieldName = filter.Key; foreach (string value in filter.Value) { var innerWhereClause = Expression.Lambda<Func<ProductDetail, bool>>( Expression.Equal(Expression.Property(Expression.Parameter(typeof(ProductDetail), "c"), fieldName), Expression.Constant(value)), Expression.Parameter(typeof(ProductDetail), "c")); q = q.Where(innerWhereClause); } } }</code>
In diesem Code wird die dynamische WHERE-Klausel dynamisch generiert, indem das Wörterbuch iteriert und für jeden Filter ein Lambda-Ausdruck erstellt wird. Fügen Sie dann diesen dynamisch generierten Ausdruck zur vorhandenen WHERE-Klausel hinzu. Durch die Verwendung von Bedingungsklauseln und Ausdrucksbäumen können Sie flexible und erweiterbare WHERE-Klauseln erstellen, um bestimmte Filteranforderungen zu erfüllen.
Diese überarbeitete Antwort behält die ursprüngliche Bedeutung bei, formuliert die Sätze jedoch neu und verwendet leicht andere Formulierungen. Das Codebeispiel wurde aus Gründen der Klarheit und Korrektheit leicht verbessert (insbesondere die Expression.Parameter
-Verwendung).
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine dynamische WHERE-Klausel in LINQ mithilfe eines Filterwörterbuchs?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!