public IFromTableExecutor GetFromTableExecutor(ExecuteFromTableStage executeFromTableStage) { if (!executors.TryGetValue(executeFromTableStage.EntityType, out var executor)) { var t = typeof(DefaultFromTableExecutor <>).MakeGenericType(executeFromTableStage.EntityType); executor = (IFromTableExecutor)Activator.CreateInstance(t); executors.TryAdd(executeFromTableStage.EntityType, executor); } return(executor); }
protected Expression <Func <Entity, bool> > GetWhereLambda(ExecuteFromTableStage stage) { return(Expression.Lambda <Func <Entity, bool> >(stage.WhereExpression, stage.ParameterExpression)); }
protected Expression <Func <Entity, Entity> > GetSelectLambda(ExecuteFromTableStage stage) { var lambda = Expression.Lambda <Func <Entity, Entity> >(stage.SelectExpression, stage.ParameterExpression); return(lambda); }
public abstract ValueTask <IQueryable <Entity> > GetTable(ISqlTableResolver tableResolver, ExecuteFromTableStage executeFromTableStage, object additionalData);
public async ValueTask <IQueryable> Execute(ISqlTableResolver tableResolver, ExecuteFromTableStage executeFromTableStage, object additionalData) { return(await GetTable(tableResolver, executeFromTableStage, additionalData)); }
public ValueTask <IQueryable> Visit(ExecuteFromTableStage executeFromTableStage) { var fromTableExecutor = _fromTableExecutorFactory.GetFromTableExecutor(executeFromTableStage); return(fromTableExecutor.Execute(_tableResolver, executeFromTableStage, data)); }
public override async ValueTask <IQueryable <Entity> > GetTable(ISqlTableResolver tableResolver, ExecuteFromTableStage executeFromTableStage, object additionalData) { QueryOptions queryOptions = new QueryOptions( executeFromTableStage.ParameterExpression, executeFromTableStage.SelectExpression, executeFromTableStage.WhereExpression, executeFromTableStage.Limit, executeFromTableStage.Offset, executeFromTableStage.ContainsFullTextSearch, executeFromTableStage.Parameters); var queryable = (IQueryable <Entity>) await tableResolver.ResolveTableName(executeFromTableStage.TableName, additionalData, queryOptions); //Check that we are not using any in memory queryable, since this select will only cost extra operations //without any gain if (!((queryable is EnumerableQuery) || (queryable is Array)) && queryOptions.TryGetSelectExpression <Entity>(out var select)) { queryable = queryable.Select(select); } if (queryOptions.TryGetWhereExpression <Entity>(out var where)) { queryable = queryable.Where(where); } if (queryOptions.TryGetOffset(out var offset)) { queryable = queryable.Skip(offset); } if (queryOptions.TryGetLimit(out var limit)) { queryable = queryable.Take(limit); } return(queryable); }