Example #1
0
        public IQueryable <TResult> GetQuery(IQueryable <TSource> query)
        {
            if (query == null)
            {
                throw new ArgumentNullException(nameof(query));
            }

            var groupBy = MakeGroupByExpression(GroupingKeys.ToArray());

            IQueryable query1 = (IQueryable)TypicalLinqMethods.QueryableGroupBy
                                .MakeGenericMethod(typeof(TSource), groupBy.ReturnType)
                                .Invoke(null, new object[] { query, groupBy });

            var selectExpr = MakeSelectExpression(groupBy, _mappings);

            MethodInfo selectMethod = TypicalLinqMethods.QueryableSelect.MakeGenericMethod(query1.ElementType, typeof(TResult));

            query1 = (IQueryable)selectMethod.Invoke(null, new object[] { query1, selectExpr });

            if (!_sorts.IsNullOrEmpty())
            {
                query1 = OrderByBuilder.Build(query1, _sorts);
            }

            return((IQueryable <TResult>)query1);
        }
Example #2
0
        internal protected virtual IQueryable DefaultSort(IQueryable query, bool enforceOrderable)
        {
            var q0 = query;

            if (_defaultSorts != null && _defaultSorts.TryGetValue(query.ElementType, out Delegate sorter))
            {
                query = (IQueryable)sorter.DynamicInvoke(query, this);
            }
            else
            {
                OrderByBuilder.TryBuildDefault(ref query, this);
            }

            if (enforceOrderable && q0 == query || !(query is IOrderedQueryable))
            {
                query = OrderByBuilder.BuildByKeys(query);
            }

            return(query);
        }
Example #3
0
 public virtual IQueryable <T> OrderBy <T>(IQueryable <T> query)
 {
     return(OrderByBuilder.Build(query, this));
 }