protected internal override Expression VisitProjection(ProjectionExpression node) { var model = QueryableExecutionModelBuilder.Build(node, _serializerRegistry); Expression executor; if (_cancellationToken != null) { // we are async executor = Expression.Call( _provider, "ExecuteAsync", Type.EmptyTypes, Expression.Constant(model, typeof(QueryableExecutionModel)), _cancellationToken); if (node.Aggregator != null) { executor = Expression.Invoke( node.Aggregator, Expression.Convert(executor, node.Aggregator.Parameters[0].Type), _cancellationToken); } } else { // we are sync executor = Expression.Call( _provider, "Execute", Type.EmptyTypes, Expression.Constant(model, typeof(QueryableExecutionModel))); if (node.Aggregator != null) { executor = Expression.Invoke( node.Aggregator, Expression.Convert(executor, node.Aggregator.Parameters[0].Type)); } } return(executor); }
public QueryableExecutionModel BuildExecutionModel(Expression expression) { return(QueryableExecutionModelBuilder.Build( Prepare(expression), _collection.Settings.SerializerRegistry)); }