Ошибка выражения

У меня есть такое выражение:

Linq2Rest.Reactive.InnerRestObservable`1[A]
    .Where(item => (Convert(IIF((item != null), item.ID, 0)) == Convert(61)))
    .Skip(0)
    .Take(20)

Когда я вызываю метод Subscribe, я получаю такую ​​ошибку:

переменная 'item' типа 'A' ссылается из области видимости '', но она не определена

Не могу понять, в чем проблема. На самом деле не вижу никаких проблем с аргументом элемента...

UPD. Где пункт построен с этим кодом:

public static IQbservable WhereExpression(this IQbservable query, Expression filterExpression, ParameterExpression instance = null)
        {
            if (instance == null)
                instance = Expression.Parameter(query.ElementType, "item"); // NOI18N

            var filteredQuery = (IQbservable)GenericsHelper.InvokeGenericExtensionMethod(
                typeof(Qbservable),
                "Where", // NOI18N
                new[] { query.ElementType },
                query,
                Expression.Lambda(filterExpression, instance)
            );

            return filteredQuery;
        }
public static object InvokeGenericExtensionMethod(
            Type extensionClass,
            string extensionMethodName,
            Type[] genericTypes,
            params object[] parameters
        )
        {
            var method = extensionClass.GetMethods().FirstOrDefault(m =>
                m.Name == extensionMethodName &&
                m.IsGenericMethod &&
                m.GetGenericArguments().Length == genericTypes.Length &&
                m.GetParameters().Length == parameters.Length
            );

            if (method == null)
                throw new ArgumentException(string.Format("Type {0} doesn't contain method {1}", extensionClass.Name, extensionMethodName)); // NOI18N

            var genericMethod = method.MakeGenericMethod(genericTypes);

            return genericMethod.Invoke(null, parameters);
        }

UPD 2. Вот как называет WhereExpression:

foreach (var filter in filters)
            {
                var paramExpression = Expression.Parameter(query.ElementType, "item"); // NOI18N
                query = query.WhereExpression(filter.CreateFilterExpression(paramExpression), paramExpression);
            }

filters - это коллекция интерфейса IFilterDescriptor от telerik.

1 ответ

Вам необходимо использовать один и тот же экземпляр ParameterExpression как в качестве параметра, так и в теле выражения.

Проще всего было бы просто использовать одно из выражения фильтра, используя его полностью.

Другие вопросы по тегам