3

ユーザー入力に基づいていくつかの検索条件を動的に構築するコードがいくつかあり、その結果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' 式を作成するにはどうすればよいですか?

4

2 に答える 2

8
Expression<Func<T, bool>> falsePredicate = x => false;
于 2012-11-23T10:33:05.847 に答える
6

全体を if-else 式でラップできますか?

意味:

if input
    return <your normal code>
else
    return false

戻り値は式で暗黙的です。式の戻り値は単に最後の値になります。だからあなたは試すことができます:

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

それnormalSearchExpressionはブール値も返すと仮定しています。

于 2012-11-23T10:44:13.937 に答える