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); }
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); }
public virtual IQueryable <T> OrderBy <T>(IQueryable <T> query) { return(OrderByBuilder.Build(query, this)); }