Verwenden Sie OR-Logik, um dynamische WHERE-Klauseln in LINQ to Entities zu erstellen
LINQ to Entities verwendet verzögerte Ausführung, um dynamische Abfragen zu erstellen. Diese Abfragen verwenden jedoch normalerweise AND, um WHERE-Bedingungen zu verbinden. Erwägen Sie zum Implementieren der ODER-Logik die Verwendung einer Prädikat-Builder-Bibliothek wie LINQKit.
Verwenden Sie den PredicateBuilder von LINQKit
Mit LINQKit können Prädikate mithilfe des PredicateBuilder dynamisch erstellt werden. Hier ist eine modifizierte Version des bereitgestellten Codes:
<code class="language-c#">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>
Expand()
ersetzt den aufrufenden Ausdruck durch eine einfachere Struktur, die Entity Framework versteht. Ohne sie kommt es während der Abfrageausführung zu Ausnahmen.
Andere Prädikatersteller
Erwägen Sie alternativ die Verwendung des universellen Prädikat-Builders von Peter Montgomery: https://www.php.cn/link/cfaedf8d25fee6179bfc4bcb64bbbfbd()`.
Das obige ist der detaillierte Inhalt vonWie erstellt man dynamische WHERE-Klauseln mit OR-Logik in LINQ to Entities?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!