Utilisez la logique OR pour créer des clauses WHERE dynamiques dans LINQ to Entities
LINQ to Entities utilise une exécution retardée pour créer des requêtes dynamiques. Cependant, ces requêtes utilisent généralement AND pour connecter les conditions WHERE. Pour implémenter la logique OU, envisagez d'utiliser une bibliothèque de création de prédicats telle que LINQKit.
Utilisez PredicateBuilder de LINQKit
Avec LINQKit, les prédicats peuvent être construits dynamiquement à l'aide de son PredicateBuilder. Voici une version modifiée du code fourni :
<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()
remplace l'expression appelante par une structure plus simple que Entity Framework comprend. Sans cela, des exceptions se produiront lors de l'exécution de la requête.
Autres constructeurs de prédicats
Vous pouvez également envisager d'utiliser le générateur de prédicats universel de Peter Montgomery : https://www.php.cn/link/cfaedf8d25fee6179bfc4bcb64bbbfbd()`.
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!