public static QueryableExecutionModel Build(Expression node, IBsonSerializerRegistry serializerRegistry) { var builder = new QueryableExecutionModelBuilder(serializerRegistry); builder.Visit(node); return (QueryableExecutionModel)Activator.CreateInstance( typeof(AggregateQueryableExecutionModel<>).MakeGenericType(builder._serializer.ValueType), builder._stages, builder._serializer); }
public static QueryableExecutionModel Build(Expression node, IBsonSerializerRegistry serializerRegistry) { var builder = new QueryableExecutionModelBuilder(serializerRegistry); builder.Visit(node); return((QueryableExecutionModel)Activator.CreateInstance( typeof(AggregateQueryableExecutionModel <>).MakeGenericType(builder._serializer.ValueType), builder._stages, builder._serializer)); }
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)); }