Heim > Backend-Entwicklung > C++ > Wie kombinieren Sie logische Ausdrücke vom Typ 'Expression' in Linq?

Wie kombinieren Sie logische Ausdrücke vom Typ 'Expression' in Linq?

DDD
Freigeben: 2025-01-31 06:01:09
Original
588 Leute haben es durchsucht

How to Combine Logical Expressions of Type `Expression` in LINQ?

Kombinieren Sie im LINQ den logischen Ausdruck des Typs

Expression<Func<bool>> lINQ verwendet häufig die Expression, die Expression ist eine Darstellung der Lambda -Expression. Bei der Verarbeitung von Ausdrücken werden häufig zwei logische Ausdrücke benötigt, z. B. und oder oder nicht.

Betrachten Sie beispielsweise die folgenden zwei Ausdrücke:

Möglicherweise möchten wir diese Ausdrücke kombinieren, um den gleichen neuen Ausdruck zu erhalten:

Expression<Func<bool>> expr1;
Expression<Func<bool>> expr2;
Nach dem Login kopieren

<合> Der Ausdruck der Kombination mit denselben Parametern

// 示例用法(原样无效)
Expression<Func<bool>> andExpression = expr1 AND expr2;
Nach dem Login kopieren

Wenn <<> und die gleichen Parameter verwenden, ist die Operation sehr einfach:

<合> Der Ausdruck verschiedener Parameter mit einer Kombination expr1 expr2

Wenn der Ausdruck jedoch unterschiedliche Parameter verwendet, müssen wir darauf achten, wie sie kombiniert werden. Verwenden Sie <现>, um dies zu erreichen:
var body = Expression.AndAlso(expr1.Body, expr2.Body);
var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);
Nach dem Login kopieren

<用> Allgemeine Methode

Das folgende Codefragment bietet eine gemeinsame Methode, um den am besten geeigneten Weg zu bestimmen, um den Kombinationsausdruck zu bestimmen: Invoke

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;
}
Nach dem Login kopieren
<注意> Andere Vorsichtsmaßnahmen

In .NET 4.0 und höhere Versionen können Sie

Klasse verwenden, um EF -Sicherheitsausdrücke zu erstellen:

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);
}
Nach dem Login kopieren
Diese Revision Output hält das Originalbild und liefert eine bessere und lesbare Erklärung der Code -Snippets, um eine bessere Lesbarkeit zu erhalten

Das obige ist der detaillierte Inhalt vonWie kombinieren Sie logische Ausdrücke vom Typ 'Expression' in Linq?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage