내가있어 이러한 표현 : 나는 그것에 Subscribe method를 호출 할 때표현 실패
Linq2Rest.Reactive.InnerRestObservable`1[A]
.Where(item => (Convert(IIF((item != null), item.ID, 0)) == Convert(61)))
.Skip(0)
.Take(20)
내가 같은 오류를받을 :
variable 'item' of type 'A' referenced from scope '', but it is not defined
이 문제가 무엇인지 알아낼 수 없습니다. 실제로 항목 인수에 문제가 보이지 않습니다 ...
UPD. 이 코드로 구축 Where 절 :
foreach (var filter in filters)
{
var paramExpression = Expression.Parameter(query.ElementType, "item"); // NOI18N
query = query.WhereExpression(filter.CreateFilterExpression(paramExpression), paramExpression);
}
필터 telerik에서 IFilterDescriptor 인터페이스의 모음입니다 :
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 호출하는 방법이다.
'1' 전에 백 tick이란 무엇입니까? 어떤 종류의'.NET 6.0' 기능? –
@KingKing : 일반 클래스의 이름입니다. .NET 2.0에서 제네릭이 소개 되었기 때문에 이와 비슷합니다. 예 :'new List() .GetType(). ToString()'System.Collections.Generic.List를 얻습니다. \'1 [System.String]' –
@Pavel : 누가이 표현식을 작성합니까? 코드로 빌드하는 경우이 코드를 표시하십시오. –