Heim >Backend-Entwicklung >C++ >Wie kombinieren Sie logische Ausdrücke vom Typ 'Expression' in Linq?
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.
Möglicherweise möchten wir diese Ausdrücke kombinieren, um den gleichen neuen Ausdruck zu erhalten:
<code class="language-csharp">Expression<Func<bool>> expr1; Expression<Func<bool>> expr2;</code>
Der Ausdruck der Kombination mit denselben Parametern
<code class="language-csharp">// 示例用法(原样无效) Expression<Func<bool>> andExpression = expr1 AND expr2;</code>
Wenn und die gleichen Parameter verwenden, ist die Operation sehr einfach:
Der Ausdruck verschiedener Parameter mit einer Kombination expr1
expr2
<code class="language-csharp">var body = Expression.AndAlso(expr1.Body, expr2.Body); var lambda = Expression.Lambda<Func<bool>>(body, expr1.Parameters[0]);</code>
Allgemeine Methode
Das folgende Codefragment bietet eine gemeinsame Methode, um den am besten geeigneten Weg zu bestimmen, um den Kombinationsausdruck zu bestimmen: Invoke
<code class="language-csharp">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; }</code>Andere Vorsichtsmaßnahmen
In .NET 4.0 und höhere Versionen können Sie
Klasse verwenden, um EF -Sicherheitsausdrücke zu erstellen:
<code class="language-csharp">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); }</code>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!