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
Barbara StreisandOriginal
2025-01-22 04:56:13793Durchsuche

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:

<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!

Stellungnahme:
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