Я хочу использовать Linq IQueryable Toolkit в проекте на .NET Compact Framework. Возможности Linq в CF немного изменены, то есть: интерфейс IQueryable недоступен. Итак, я нашел сторонние библиотеки, которые реализуют недостающие функции, которые мне нужны.
Теперь у меня проблема с отсутствующим методом "MethodBase.GetCurrentMethod ()". Существует около 100 методов, в которых используется этот метод. Так что мне не нужен точный клон GetCurrentMethod (). Обходного пути для этого конкретного случая достаточно.
Образец исходного кода:
public static bool Any<TSource>( this IQueryable<TSource> source ) {
return source.Provider.Execute<bool>( Expression.Call( null, ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod( new Type[] { typeof( TSource ) } ), new Expression[] { source.Expression } ) );
}
public static bool Any<TSource>( this IQueryable<TSource> source, Expression<Func<TSource, bool>> predicate ) {
return source.Provider.Execute<bool>( Expression.Call( null, ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod( new Type[] { typeof( TSource ) } ), new Expression[] { source.Expression, Expression.Quote( predicate ) } ) );
}
Возможное решение - заменить "(MethodInfo) MethodBase.GetCurrentMethod ()" конкретным вызовом метода. Например: GetMethod_Any_TSource_On_Source () и GetMethod_Any_TSource_On_Source_With_Predicate_TSource_Bool ().
Я ищу какое-нибудь удобное решение, как это решить.