私はこのコードでLINQクエリを動的に構築しています。LINQ式。スコープから参照される型の変数 'p'が定義されていません
Variable 'p' of type referenced from scope, but it is not defined**
私は一度だけ/使用pを定義することができますね。私は私の検索で複数のsearchStringのを持っている場合 複数の表現が追加されたときに、私は次のエラーを取得する(、動作しているようですが、。しかし、もしそうなら、私はあなたが私が代わりに製品などの文字列を使用(しようとしているいくつかの行をここで、簡素化
if (searchStrings != null)
{
foreach (string searchString in searchStrings)
{
Expression<Func<Product, bool>> containsExpression = p => p.Name.Contains(searchString);
filterExpressions.Add(containsExpression);
}
}
Func<Expression, Expression, BinaryExpression>[] operators = new Func<Expression, Expression, BinaryExpression>[] { Expression.AndAlso };
Expression<Func<Product, bool>> filters = this.CombinePredicates<Product>(filterExpressions, operators);
IQueryable<Product> query = cachedProductList.AsQueryable().Where(filters);
query.Take(itemLimit).ToList(); << **error when the query executes**
public Expression<Func<T, bool>> CombinePredicates<T>(IList<Expression<Func<T, bool>>> predicateExpressions, Func<Expression, Expression, BinaryExpression> logicalFunction)
{
Expression<Func<T, bool>> filter = null;
if (predicateExpressions.Count > 0)
{
Expression<Func<T, bool>> firstPredicate = predicateExpressions[0];
Expression body = firstPredicate.Body;
for (int i = 1; i < predicateExpressions.Count; i++)
{
body = logicalFunction(body, predicateExpressions[i].Body);
}
filter = Expression.Lambda<Func<T, bool>>(body, firstPredicate.Parameters);
}
return filter;
}
私はそれを得ていません。あなたの 'CombinePredicates'は' n'式と 'n-1'演算子を期待しているようです。しかし、あなたが呼び出す場所には、長さが '1'の演算子の配列があります。結合する述語が2つ以上ある場合、配列の範囲外に出ることを除いて、私は例外を予期します。 –
私はそれを見ました、私は私の例をよりコンパクトにするためにいくつかのものを取り出しました。しかし、私はその部分を技術的に正しいものにするために私の質問を変えます。 – Tys
私はその部分を修正しました。しかし、それでも問題はそのままです。 – Tys