繁体   English   中英

如何使用C#表达式树创建LINQ友好的“return false”表达式?

[英]How can I create a LINQ-friendly 'return false' expression using C# expression trees?

我有一些代码可以根据用户输入动态构建一些搜索条件,从而生成一个Expression<Func<T, bool>> ,它传递给LINQ .Where()方法。 当输入存在时它工作正常,但是当输入存在时,我想创建一个简单的'return false;' 声明,以便不返回任何结果。

下面是我当前的尝试,但是当它传递给.Where()方法时,它会抛出一个NotSupportedException“类型为'Block'的未知LINQ表达式。”

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);

如何构建一个可以由LINQ解释的'return false'表达式?

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

你能把整个东西包裹在if-else表达式中吗?

含义:

if input
    return <your normal code>
else
    return false

返回隐含在表达式中; 表达式的返回值将只是最后一个值。 所以你可以尝试:

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

这是假设normalSearchExpression也返回一个bool。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM