Clause WHERE dynamique (OR) dans LINQ to Entities
La création de requêtes dynamiques à l'aide de l'opérateur OR dans LINQ nécessite PredicateBuilder, un utilitaire LINQKit. Voici comment procéder :
<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>
Cependant, utiliser AsExpandable()
est une autre option :
<code class="language-csharp">return query.AsExpandable().Where(pred).FirstOrDefault();</code>
Expand
permet de gérer les expressions appelantes que EF ne peut pas gérer. Sans cela, une exception sera levée.
Une autre option Predicate Builder qui obtient la même fonctionnalité sans Expand
peut être trouvée sur http://petemontgomery.wordpress.com/2011/02/10/a-universal-predicatebuilder/.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!