Heim >Backend-Entwicklung >C++ >Wie kann ich eine dynamische OR-Abfrage mit LINQ to Entities erstellen?
Erstellen Sie dynamische OR-Abfragen mit LINQ to Entities
In LINQ to Entities ist es sehr üblich, dynamische Abfragen mit verzögerter Ausführung zu erstellen. Diese Abfragen verwenden jedoch normalerweise AND, um WHERE-Bedingungen zu verbinden.
Um die ODER-Logik zu implementieren, d. h. nach mehreren Eigenschaften mit einem einzigen Bezeichner zu suchen, können Sie den PredicateBuilder von LINQKit nutzen. Dadurch können Sie Prädikate dynamisch erstellen:
<code class="language-csharp">var query = from u in context.Users select u; var pred = Predicate.False<user>(); if (type.HasFlag(IdentifierType.Username)) pred = pred.Or(u => u.Username == identifier); if (type.HasFlag(IdentifierType.Windows)) pred = pred.Or(u => u.WindowsUsername == identifier); return query.Where(pred.Expand()).FirstOrDefault();</code>Die
Expand()
-Methode ist von entscheidender Bedeutung, da Entity Framework keine Aufrufausdrücke verarbeiten kann. Durch den Aufruf aktivieren Sie die Ausdrucks-Accessor-Klasse von LINQKit, die diese Ausdrücke durch einfachere Strukturen ersetzt, die Entity Framework versteht.
Ohne Expand()
wird der Ausdruck aufgerufen, was zu der Ausnahme führt: „Der LINQ-Ausdrucksknotentyp ‚Invoke‘ wird in LINQ to Entities nicht unterstützt.“
Ein weiterer Prädikat-Builder
Später wurde ein allgemeiner Prädikat-Builder entwickelt, der dieselbe Aufgabe ohne ausführen kann: Expand()
https://www.php.cn/link/451e10de8e2fb18a9f795679b52dc9f6
Das obige ist der detaillierte Inhalt vonWie kann ich eine dynamische OR-Abfrage mit LINQ to Entities erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!