Dynamische WHERE-Klausel (OR) in LINQ to Entities
Das Erstellen dynamischer Abfragen mit dem OR-Operator in LINQ erfordert PredicateBuilder, ein LINQKit-Dienstprogramm. So geht's:
<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 Verwendung von AsExpandable()
ist jedoch eine andere Option:
<code class="language-csharp">return query.AsExpandable().Where(pred).FirstOrDefault();</code>
Expand
-Methode ermöglicht die Verarbeitung von Aufrufausdrücken, die EF nicht verarbeiten kann. Ohne sie wird eine Ausnahme ausgelöst.
Eine weitere Predicate Builder-Option, die die gleiche Funktionalität ohne Expand
erreicht, finden Sie unter http://petemontgomery.wordpress.com/2011/02/10/a-universal-predicatebuilder/.
Das obige ist der detaillierte Inhalt vonWie erstelle ich eine dynamische WHERE-Klausel mit OR in LINQ to Entities?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!