Heim >Backend-Entwicklung >C++ >Wie kombinieren Sie zwei Expressionsausdrücke mit logischen Operatoren?
zwei Kombinationsexpressionen (Expression
Um die beiden Ausdrücke logischer Operatoren zu verwenden, können Sie die folgenden Methoden auswählen:
<code>Expression<func bool="">> expr1; Expression<func bool="">> expr2; ... // 这不会按预期工作 Expression<func bool="">> andExpression = expr1 AND expr2;</code>Methode 1: Die gleiche Parameterexpression
Methode 2: verschiedene Parameterexpressions
<code>var body = Expression.AndAlso(expr1.Body, expr2.Body); var lambda = Expression.Lambda<func bool="">(body, expr1.Parameters[0]);</code>
Wenn zwei Ausdrücke unterschiedliche Parameterexpression -Instanzen verwenden, können Sie INVOKE verwenden, um sie zu kombinieren:
<code>static Expression<func bool=""> Not<T>( this Expression<func bool=""> expr) { return Expression.Lambda<func bool="">( Expression.Not(expr.Body), expr.Parameters[0]); }</code>
Methode 3: Allgemeine Version
<code>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>Diese Version erkennt automatisch, ob die beiden Ausdrücke dieselben Parameter verwenden und den Ausdruck entsprechend anpassen:
Für .NET 4.0 und höhere Versionen können Sie die Expressionsvisitor -Klasse verwenden, um einen EF -Sicherheitsausdruck zu erstellen. Mit dieser Methode können Sie den ursprünglichen Parameter durch die Anzahl der neuen Parameter ohne explizite Konvertierung ersetzen:
<code>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); } // 否则,使用 Invoke 来组合 return Expression.Lambda<func bool="">( Expression.AndAlso( expr1.Body, Expression.Invoke(expr2, param)), param); }</code>
Das obige ist der detaillierte Inhalt vonWie kombinieren Sie zwei Expressionsausdrücke mit logischen Operatoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!