Exemple #1
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="q"></param>
        /// <param name="orderString">Id asc,Age desc...</param>
        /// <returns></returns>
        public static IOrderedQuery <T> OrderBy <T>(this IQuery <T> q, string orderString)
        {
            if (q == null)
            {
                throw new ArgumentNullException("q");
            }
            if (string.IsNullOrEmpty(orderString))
            {
                throw new ArgumentNullException("orderString");
            }

            List <Ordering> orderingList = SplitOrderingString(orderString);

            IOrderedQuery <T> orderedQuery = null;

            for (int i = 0; i < orderingList.Count; i++)
            {
                Ordering ordering = orderingList[i];
                if (orderedQuery == null)
                {
                    orderedQuery = q.InnerOrderBy(ordering);
                }
                else
                {
                    orderedQuery = orderedQuery.InnerThenBy(ordering);
                }
            }

            return(orderedQuery);
        }
Exemple #2
0
        static IOrderedQuery <T> Invoke <T>(object q, MethodInfo orderMethod, LambdaExpression keySelector)
        {
            orderMethod = orderMethod.MakeGenericMethod(new Type[] { keySelector.Body.Type });
            IOrderedQuery <T> orderedQuery = (IOrderedQuery <T>)orderMethod.FastInvoke(q, new object[] { keySelector });

            return(orderedQuery);
        }
Exemple #3
0
        static IOrderedQuery <T> Invoke <T>(object q, MethodInfo orderMethod, LambdaExpression predicate)
        {
            orderMethod = orderMethod.MakeGenericMethod(new Type[] { predicate.Body.Type });
            IOrderedQuery <T> orderedQuery = (IOrderedQuery <T>)orderMethod.Invoke(q, new object[] { predicate });

            return(orderedQuery);
        }
Exemple #4
0
        /// <summary>
        ///     Builds a ordered result query from a queryable, that assumes client side paging.
        /// </summary>
        /// <typeparam name="TIn">The type of the t in.</typeparam>
        /// <typeparam name="TOut">The type of the t out.</typeparam>
        /// <param name="qry">The qry.</param>
        /// <param name="request">The request.</param>
        /// <param name="projection">Select projection</param>
        /// <param name="serializeSettings">Map serialize settings</param>
        /// <returns>Task&lt;List&lt;TOut&gt;&gt;.</returns>
        public static IQueryable OrderedResultsQuery <TIn, TOut>(this IQueryable <TIn> qry,
                                                                 IOrderedQuery request,
                                                                 Func <TIn, TOut> projection = null,
                                                                 JsonSerializerSettings serializeSettings = null
                                                                 )
            where TOut : new()
        {
            var result = qry.BuildOrderedQueryable(request)
                         .BuildOutputQueryable(projection, serializeSettings);

            Console.WriteLine(result.Expression.ToString());

            return(result);
        }
Exemple #5
0
        static IOrderedQuery <T> InnerThenBy <T>(this IOrderedQuery <T> q, Ordering ordering)
        {
            LambdaExpression predicate = GetOrderPredicate <T>(ordering.MemberChain);

            MethodInfo orderMethod;

            if (ordering.OrderType == OrderType.Asc)
            {
                orderMethod = typeof(IOrderedQuery <T>).GetMethod("ThenBy");
            }
            else
            {
                orderMethod = typeof(IOrderedQuery <T>).GetMethod("ThenByDesc");
            }

            IOrderedQuery <T> orderedQuery = Invoke <T>(q, orderMethod, predicate);

            return(orderedQuery);
        }
Exemple #6
0
        static IOrderedQuery <T> InnerThenBy <T>(this IOrderedQuery <T> q, Ordering ordering)
        {
            LambdaExpression keySelector = ConvertToLambda <T>(ordering.MemberChain);

            MethodInfo orderMethod;

            if (ordering.OrderType == OrderType.Asc)
            {
                orderMethod = typeof(IOrderedQuery <T>).GetMethod("ThenBy");
            }
            else
            {
                orderMethod = typeof(IOrderedQuery <T>).GetMethod("ThenByDesc");
            }

            IOrderedQuery <T> orderedQuery = Invoke <T>(q, orderMethod, keySelector);

            return(orderedQuery);
        }
Exemple #7
0
 /// <summary>
 /// Configures sorted matching facts to subsequently be sorted descending by key.
 /// </summary>
 /// <typeparam name="TSource">Type of source facts.</typeparam>
 /// <typeparam name="TKey">Type of sorting key.</typeparam>
 /// <param name="source">Query expression builder.</param>
 /// <param name="keySelector">Key selection expression used for sorting.</param>
 /// <returns>Query expression builder.</returns>
 public static IOrderedQuery <IEnumerable <TSource> > ThenByDescending <TSource, TKey>(this IOrderedQuery <IEnumerable <TSource> > source, Expression <Func <TSource, TKey> > keySelector)
 {
     source.Builder.OrderBy(keySelector, SortDirection.Descending);
     return(new QueryExpression <IEnumerable <TSource> >(source.Builder));
 }
Exemple #8
0
 private static IQueryable <TIn> BuildOrderedQueryable <TIn>(this IQueryable <TIn> source,
                                                             IOrderedQuery request
                                                             )
 {
     return(request.OrderBy.IsEmptyNullOrWhiteSpace() ? source : source.OrderBy(request.OrderBy));
 }