Expression<Func<bool>>
linq utilise souvent l'expression, l'expression est une représentation de l'expression de lambda. Lors du traitement des expressions, deux expressions logiques sont souvent nécessaires, telles que et, ou non.
Nous pouvons vouloir combiner ces expressions pour obtenir le même type de nouvelle expression:
<code class="language-csharp">Expression<Func<bool>> expr1; Expression<Func<bool>> expr2;</code>
l'expression de la combinaison avec les mêmes paramètres
<code class="language-csharp">// 示例用法(原样无效) Expression<Func<bool>> andExpression = expr1 AND expr2;</code>
Si et utilisent les mêmes paramètres, l'opération est très simple:
L'expression de différents paramètres avec une combinaison 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>
Méthode générale
Le fragment de code suivant fournit une méthode courante pour déterminer la manière la plus appropriée de déterminer l'expression combinée: 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>
Dans .NET 4.0 et des versions supérieures, vous pouvez utiliser la classe
pour créer des expressions de sécurité EF:
<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>
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!