Maison > développement back-end > C++ > Comment combiner des expressions logiques dans l'expression C #?

Comment combiner des expressions logiques dans l'expression C #?

Mary-Kate Olsen
Libérer: 2025-01-31 05:51:08
original
1052 Les gens l'ont consulté

How to Combine Logical Expressions in C# Expression?

Dans l'expression C #, combinez l'expression logique

Lorsque vous avez deux expressions de type

, vous devrez peut-être utiliser des opérateurs logiques (tels que et, ou ou non) pour les combiner. Cet article traite de diverses méthodes pour atteindre cet objectif.

Expression<Func<bool>> La même instance de paramètre

Si les deux expressions utilisent le même , la combinaison est simple:

ParameterExpression Ceci est également applicable à nier une seule opération:

var body = Expression.AndAlso(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);
Copier après la connexion

<的> différents exemples de paramètres

static Expression<Func<bool>> Not<T>(
    this Expression<Func<bool>> expr)
{
    return Expression.Lambda<Func<bool>>(
        Expression.Not(expr.Body), expr.Parameters[0]);
}
Copier après la connexion

Si l'expression utilise différentes instances de paramètres, vous pouvez utiliser pour combiner:

Cette méthode est également applicable à Invoke et

.
static Expression<Func<bool>> AndAlso<T>(
    this Expression<Func<bool>> left,
    Expression<Func<bool>> right)
{
    var param = Expression.Parameter(typeof(T), "x");
    var body = Expression.AndAlso(
            Expression.Invoke(left, param),
            Expression.Invoke(right, param)
        );
    var lambda = Expression.Lambda<Func<bool>>(body, param);
    return lambda;
}
Copier après la connexion

<用> Méthode générale OrElse Not

Afin de gérer ces deux situations, une méthode générale peut détecter les paramètres correspondent et sélectionner la méthode de combinaison appropriée:

compatibilité EF

du .NET 4.0,
static Expression<Func<bool>> AndAlso<T>(
    this Expression<Func<bool>> expr1,
    Expression<Func<bool>> expr2)
{
    ParameterExpression param = expr1.Parameters[0];
    if (ReferenceEquals(param, expr2.Parameters[0]))
    {
        return Expression.Lambda<Func<bool>>(
            Expression.AndAlso(expr1.Body, expr2.Body), param);
    }
    return Expression.Lambda<Func<bool>>(
        Expression.AndAlso(
            expr1.Body,
            Expression.Invoke(expr2, param)), param);
}
Copier après la connexion
a fourni un mécanisme pour construire une expression compatible EF:

En sélectionnant une méthode cohérente avec votre scène spécifique, vous pouvez combiner efficacement l'expression logique dans l'instance

.

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 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