述語が 3 つあります。間に入れたいと思いAndAlso
ます。ボード上にいくつかのサンプルが見つかりましたが、問題を解決できません。
これらの述語は次のとおりです。Expression<Func<T, bool>>
私はこのコードを持っています:
Expression<Func<T, bool>> predicate1 = ......;
Expression<Func<T, bool>> predicate2 = ......;
Expression<Func<T, bool>> predicate3 = ......;
"AndAlso" を作成する拡張メソッドを作成します。
public static Expression<Func<T, bool>> AndAlso<T>(
this Expression<Func<T, bool>> expr,
Expression<Func<T, bool>> exprAdd)
{
var param = Expression.Parameter(typeof(T), "p");
var predicateBody = Expression.AndAlso(expr.Body, exprAdd.Body);
return Expression.Lambda<Func<T, bool>>(predicateBody, param);
//Tried this too
//var body = Expression.AndAlso(expr.Body, exprAdd.Body);
//return Expression.Lambda<Func<T, bool>>(body, expr.Parameters[0]);
}
私はこのように使用します:
var finalPredicate = predicate1
.AndAlso<MyClass>(predicate2)
.AndAlso<MyClass>(predicate3);
述語はこれを見てください:
クエリで使用する場合:
var res = myListAsQueryable().Where(finalPredicate).ToList<MyClass>();
次のエラーが表示されます: タイプ 'BuilderPredicate.MyClass' の変数 'p' がスコープ '' から参照されていますが、定義されていません
何が悪いのか教えていただけますか?
どうもありがとう、