internal override RenderedProjectionDefinition <TProjection> TranslateExpressionToFindProjection <TSource, TProjection>(
     Expression <Func <TSource, TProjection> > expression,
     IBsonSerializer <TSource> sourceSerializer,
     IBsonSerializerRegistry serializerRegistry)
 {
     return(FindProjectionTranslator.Translate <TSource, TProjection>(expression, sourceSerializer, serializerRegistry));
 }
Esempio n. 2
0
        /// <summary>
        /// Projections the specified source.
        /// </summary>
        /// <typeparam name="TDocument">The type of the document.</typeparam>
        /// <typeparam name="TResult">The type of the result.</typeparam>
        /// <typeparam name="TNewResult">The type of the new result.</typeparam>
        /// <param name="source">The source.</param>
        /// <param name="projection">The projection.</param>
        /// <returns>The fluent find interface.</returns>
        public static IFindFluent <TDocument, TNewResult> Projection <TDocument, TResult, TNewResult>(this IFindFluent <TDocument, TResult> source, Expression <Func <TDocument, TNewResult> > projection)
        {
            Ensure.IsNotNull(source, "source");
            Ensure.IsNotNull(projection, "projection");

            var parameterSerializer = source.Collection.Settings.SerializerRegistry.GetSerializer <TDocument>();
            var projectionInfo      = FindProjectionTranslator.Translate <TDocument, TNewResult>(projection, parameterSerializer);

            return(source.Projection <TNewResult>(projectionInfo.Projection, projectionInfo.Serializer));
        }
        private ProjectedResult <T> Project <T>(Expression <Func <Root, T> > projector, string json)
        {
            var serializer     = BsonSerializer.SerializerRegistry.GetSerializer <Root>();
            var projectionInfo = FindProjectionTranslator.Translate <Root, T>(projector, serializer);

            using (var reader = new JsonReader(json))
            {
                var context = BsonDeserializationContext.CreateRoot(reader);
                return(new ProjectedResult <T>
                {
                    Projection = projectionInfo.Document,
                    Value = projectionInfo.ProjectionSerializer.Deserialize(context)
                });
            }
        }
 /// <inheritdoc />
 public override RenderedProjectionDefinition <TProjection> Render(IBsonSerializer <TSource> sourceSerializer, IBsonSerializerRegistry serializerRegistry)
 {
     return(FindProjectionTranslator.Translate <TSource, TProjection>(_expression, sourceSerializer));
 }