Maison > développement back-end > C++ > Comment puis-je créer une requête OU dynamique avec LINQ to Entities ?

Comment puis-je créer une requête OU dynamique avec LINQ to Entities ?

Barbara Streisand
Libérer: 2025-01-22 04:56:13
original
774 Les gens l'ont consulté

How Can I Create a Dynamic OR Query with LINQ to Entities?

Créer des requêtes OU dynamiques à l'aide de LINQ to Entities

Dans LINQ to Entities, il est très courant de créer des requêtes dynamiques en utilisant une exécution différée. Cependant, ces requêtes utilisent généralement AND pour connecter les conditions WHERE.

Pour implémenter la logique OU, c'est-à-dire rechercher plusieurs propriétés à l'aide d'un seul identifiant, vous pouvez tirer parti du PredicateBuilder de LINQKit. Cela vous permet de construire des prédicats dynamiquement :

<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>
Copier après la connexion
La méthode

Expand() est cruciale car Entity Framework ne peut pas gérer les expressions d'appel. En l'appelant, vous activez la classe d'accesseur d'expression de LINQKit, qui remplace ces expressions par des structures plus simples comprises par Entity Framework.

Sans Expand(), l'expression est invoquée, ce qui entraîne l'exception : "Le type de nœud d'expression LINQ 'Invoke' n'est pas pris en charge dans LINQ to Entities

.

Un autre générateur de prédicats

Plus tard, un générateur de prédicats général a été développé et peut effectuer la même tâche sans Expand() :

https://www.php.cn/link/451e10de8e2fb18a9f795679b52dc9f6

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal