public static Expression GetOrderByMethod <T>(this Expression expression, ODataQueryOptions <T> options, ODataSettings oDataSettings = null) { if (NoQueryableMethod(options, oDataSettings)) { return(null); } return(expression.GetQueryableMethod ( options.Context, options.OrderBy?.OrderByClause, typeof(T), options.Skip?.Value, GetPageSize() )); int?GetPageSize() { if (oDataSettings?.PageSize == null && options.Top == null) { return(null); } if (options.Top == null) { return(oDataSettings.PageSize); } else if (oDataSettings?.PageSize == null) { return(options.Top.Value); } return(options.Top.Value < oDataSettings.PageSize ? options.Top.Value : oDataSettings.PageSize); } }
private static bool NoQueryableMethod(ODataQueryOptions options, ODataSettings oDataSettings) => options.OrderBy is null && options.Top is null && options.Skip is null && oDataSettings?.PageSize is null;
/// <summary> /// Returns a lambda expresion for order and paging expressions /// </summary> /// <typeparam name="T"></typeparam> /// <param name="options"></param> /// <param name="oDataSettings"></param> /// <returns></returns> public static Expression <Func <IQueryable <T>, IQueryable <T> > > GetQueryableExpression <T>(this ODataQueryOptions <T> options, ODataSettings oDataSettings = null) { if (NoQueryableMethod(options, oDataSettings)) { return(null); } ParameterExpression param = Expression.Parameter(typeof(IQueryable <T>), "q"); return(Expression.Lambda <Func <IQueryable <T>, IQueryable <T> > > ( param.GetOrderByMethod(options, oDataSettings), param )); }