Lee*_*e D 3 .net c# linq 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);
Run Code Online (Sandbox Code Playgroud)
如何构建一个可以由LINQ解释的'return false'表达式?
你能把整个东西包裹在if-else表达式中吗?
含义:
if input
return <your normal code>
else
return false
Run Code Online (Sandbox Code Playgroud)
返回隐含在表达式中; 表达式的返回值将只是最后一个值.所以你可以尝试:
Expression.Condition
(
Expression.NotEqual(input, Expression.Constant("")),
normalSearchExpression,
Expression.Constant(false)
)
Run Code Online (Sandbox Code Playgroud)
假设normalSearchExpression也会返回一个bool.
| 归档时间: |
|
| 查看次数: |
1685 次 |
| 最近记录: |