Я сделал общую функциональность, которая во время выполнения компилируется из JSON-фильтра в Выражение , и у меня возникла проблема при вызове make Skip and Take на моем IQueryable, чтобы он был полностью скомпилирован (без exec sp_executesql ) в SQL
Мой метод:
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» не совместим с предоставленными аргументами.