internal override RenderedProjectionDefinition <TOutput> TranslateExpressionToProjection <TInput, TOutput>(
     Expression <Func <TInput, TOutput> > expression,
     IBsonSerializer <TInput> inputSerializer,
     IBsonSerializerRegistry serializerRegistry,
     ExpressionTranslationOptions translationOptions)
 {
     return(AggregateProjectTranslator.Translate <TInput, TOutput>(expression, inputSerializer, serializerRegistry, translationOptions));
 }
        private async Task <ProjectedResult <TResult> > Project <TResult>(Expression <Func <Root, TResult> > projector)
        {
            var serializer     = BsonSerializer.SerializerRegistry.GetSerializer <Root>();
            var projectionInfo = AggregateProjectTranslator.Translate(projector, serializer, BsonSerializer.SerializerRegistry);

            var pipelineOperator = new BsonDocument("$project", projectionInfo.Document);
            var result           = await _collection.Aggregate()
                                   .Project(new BsonDocumentProjectionDefinition <Root, TResult>(projectionInfo.Document, projectionInfo.ProjectionSerializer))
                                   .FirstAsync();

            return(new ProjectedResult <TResult>
            {
                Projection = projectionInfo.Document,
                Value = result
            });
        }
Пример #3
0
        private async Task <ProjectedResult <TResult> > Project <TResult>(Expression <Func <Root, TResult> > projector)
        {
            var serializer     = BsonSerializer.SerializerRegistry.GetSerializer <Root>();
            var projectionInfo = AggregateProjectTranslator.Translate(projector, serializer, BsonSerializer.SerializerRegistry);

            var pipelineOperator = new BsonDocument("$project", projectionInfo.Document);

            using (var cursor = await _collection.AggregateAsync(new PipelineStagePipelineDefinition <Root, TResult>(new PipelineStageDefinition <Root, TResult>[] { pipelineOperator }, projectionInfo.ProjectionSerializer)))
            {
                var list = await cursor.ToListAsync();

                return(new ProjectedResult <TResult>
                {
                    Projection = projectionInfo.Document,
                    Value = (TResult)list[0]
                });
            }
        }
 public override RenderedProjectionDefinition <TNewResult> Render(IBsonSerializer <TResult> documentSerializer, IBsonSerializerRegistry serializerRegistry)
 {
     return(AggregateProjectTranslator.Translate <TResult, TNewResult>(_expression, documentSerializer, serializerRegistry, _translationOptions));
 }