Heim > Backend-Entwicklung > C++ > Wie kann ich eine dynamische OR-Abfrage mit LINQ to Entities erstellen?

Wie kann ich eine dynamische OR-Abfrage mit LINQ to Entities erstellen?

Barbara Streisand
Freigeben: 2025-01-22 04:56:13
Original
813 Leute haben es durchsucht

How Can I Create a Dynamic OR Query with LINQ to Entities?

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:

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();
Nach dem Login kopieren
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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage