public ValueTask <IQueryable> Visit(ExecuteOrderByStage executeOrderByStage) { Debug.Assert(queryable != null); var orderByExecutor = _orderByExecutorFactory.GetOrderByExecutor(executeOrderByStage); return(orderByExecutor.Execute(queryable, executeOrderByStage)); }
public IOrderByExecutor GetOrderByExecutor(ExecuteOrderByStage executeOrderByStage) { if (!executors.TryGetValue(executeOrderByStage.EntityType, out var executor)) { var t = typeof(DefaultOrderByExecutor <>).MakeGenericType(executeOrderByStage.EntityType); executor = (IOrderByExecutor)Activator.CreateInstance(t); executors.TryAdd(executeOrderByStage.EntityType, executor); } return(executor); }
public override ValueTask <IQueryable <Entity> > ExecuteOrderBy(IQueryable <Entity> queryable, ExecuteOrderByStage executeOrderByStage) { var sortItems = executeOrderByStage.SortItems; if (sortItems.Count == 0) { return(new ValueTask <IQueryable <Entity> >(queryable)); } int i = 0; var sortItem = sortItems[i]; var lambda = GetSortLambda(sortItem, executeOrderByStage.ParameterExpression); IOrderedQueryable <Entity> orderedQueryable; if (sortItem.Descending) { orderedQueryable = queryable.OrderByDescending(lambda); } else { orderedQueryable = queryable.OrderBy(lambda); } i++; for (; i < sortItems.Count; i++) { sortItem = sortItems[i]; lambda = GetSortLambda(sortItem, executeOrderByStage.ParameterExpression); if (sortItem.Descending) { orderedQueryable = orderedQueryable.ThenByDescending(lambda); } else { orderedQueryable = orderedQueryable.ThenBy(lambda); } } return(new ValueTask <IQueryable <Entity> >(orderedQueryable)); }
public abstract ValueTask <IQueryable <Entity> > ExecuteOrderBy(IQueryable <Entity> queryable, ExecuteOrderByStage executeOrderByStage);
public async ValueTask <IQueryable> Execute(IQueryable queryable, ExecuteOrderByStage executeOrderByStage) { return(await ExecuteOrderBy((IQueryable <Entity>) queryable, executeOrderByStage)); }