示例#1
0
        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);
            }
        }
示例#2
0
 private static bool NoQueryableMethod(ODataQueryOptions options, ODataSettings oDataSettings)
 => options.OrderBy is null &&
 options.Top is null &&
 options.Skip is null &&
 oDataSettings?.PageSize is null;
示例#3
0
        /// <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
                   ));
        }