我做了一些通用功能,这些功能在运行时会从 JSON过滤器编译为 Expression ,并在IQueryable上进行make Skip and Take调用时出现问题,以便全部编译(在SQL中没有 exec sp_executesql )
我的方法:
public static class PagingExtensions
{
public static IQueryable<T> Page<T>(this IQueryable<T> query, QueryRequest queryRequest) where T : class
{
//if (queryRequest.Skip.HasValue)
//{
//query = query.Skip(queryRequest.Skip.Value);
//}
//if (queryRequest.Take.HasValue)
//{
//query = query.Take(queryRequest.Take.Value);
//}
var methodName = "Skip";
var resultExp = Expression.Call(
typeof(IQueryable),
"Skip",
Type.EmptyTypes,
Expression.Constant(queryRequest.Skip.Value));
query = query.Provider.CreateQuery<T>(resultExp);
return query;
}
}
例外:
InvalidOperationException:类型为'System.Linq.IQueryable'的方法'Skip'与提供的参数不兼容。