【发布时间】:2009-03-12 15:51:28
【问题描述】:
我想在 .NET Compact Framework 的项目中使用 Linq IQueryable Toolkit。 CF 中的 Linq 功能有点不同 - 即:IQueryable 接口不可用。所以我找到了第三方库,它实现了我需要的缺失功能。
现在我遇到了缺少方法“MethodBase.GetCurrentMethod()”的问题。有 cca 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()。
我正在寻找一些方便的解决方案如何解决它。
【问题讨论】:
标签: .net linq generics reflection compact-framework