tanımlı değil Bu kodla dinamik olarak bir LINQ sorgusu yapıyorum. İşe gibi görünüyor, ama benim aramada birden fazla searchString varken birden ifadeler eklenir, bu nedenle zaman (i aşağıdaki hatayı alıyorum:LINQ ifadeleri. Değişken 'p', kapsamdan başvurulan tür ancak
Variable 'p' of type referenced from scope, but it is not defined**
Ben sadece bir kez/kullanımı p tanımlayabilirsiniz sanırım. fakat, eğer öyleyse, sana ben değil, Ürün vb dizeyi kullanın (yapmaya çalışan birkaç satır burada, basitleştirme
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;
}
Tam anlamıyorum. Görünüşe göre, 'CombinePredicates' 'n' ifadeleri ve' n-1' operatörlerini bekliyor. Ancak, onu çağırdığınız yerde, '1' uzunluğuna sahip bir dizi operatörünüz var. Katılmak için '2' 'den fazla yüklemenin olması durumunda dizinin sınırlarının dışına çıkma istisnası beklerdim. –
Bunu gördüm, örneğimi daha kompakt hale getirmek için bazı şeyler aldım. Ama bu kısmı teknik olarak doğru yapmak için sorumu değiştireceğim. – Tys
Bu kısmı düzelttim.Ama yine de sorun olduğu gibi kalır. – Tys