Comment créer une expression 'return false' compatible avec LINQ en utilisant des arbres d'expression C #?

.net c# expression-trees linq

Question

J'ai du code qui construit dynamiquement certains critères de recherche en fonction de la saisie de l'utilisateur, ce qui aboutit à un Expression<Func<T, bool>> transmis à la méthode LINQ .Where (). Cela fonctionne bien lorsque l'entrée est présente, mais lorsque l'entrée n'est pas présente, je souhaite créer un simple 'return false'; instruction afin qu'aucun résultat ne soit renvoyé.

Ci-dessous, ma tentative actuelle, mais lorsque cela est passé à la méthode .Where (), une exception NotSupportedException "Expression LINQ inconnue de type" Block "est renvoyée.

var parameter = Expression.Parameter(typeof(T), "x");
var falseValue = Expression.Constant(false);
var returnTarget = Expression.Label(typeof (bool));

var returnFalseExpression = Expression.Block(Expression.Return(returnTarget, falseValue), Expression.Label(returnTarget, falseValue));
var lambdaExpression = Expression.Lambda<Func<T, bool>>(returnFalseExpression, parameter);

Comment créer une expression 'return false' pouvant être interprétée par LINQ?

Réponse acceptée

Expression<Func<T, bool>> falsePredicate = x => false;

Réponse populaire

Pouvez-vous envelopper le tout dans une expression if-else?

Sens:

if input
    return <your normal code>
else
    return false

Le retour est implicite dans les expressions; la valeur de retour de l'expression sera simplement la dernière valeur. Pour que vous puissiez essayer:

    Expression.Condition
    (
      Expression.NotEqual(input, Expression.Constant("")), 
      normalSearchExpression, 
      Expression.Constant(false)
    )

En supposant que normalSearchExpression renvoie également un bool.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow