Maison >développement back-end >C++ >Comment créer une clause WHERE dynamique avec OR dans LINQ to Entities ?

Comment créer une clause WHERE dynamique avec OR dans LINQ to Entities ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-22 05:01:08666parcourir

How to Build a Dynamic WHERE Clause with OR in LINQ to Entities?

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>
La méthode

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!

Déclaration:
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