Beispiel #1
0
            private bool TryBuildMap(MethodCallExpression node, out BsonValue result)
            {
                result = null;
                var sourceSerializationExpression = node.Arguments[0] as ISerializationExpression;

                if (sourceSerializationExpression != null)
                {
                    var lambda = MongoExpressionVisitor.GetLambda(node.Arguments[1]);
                    if (lambda.Body is ISerializationExpression)
                    {
                        result = BuildValue(lambda.Body);
                        return(true);
                    }

                    var inputValue = BuildValue(node.Arguments[0]);
                    var asValue    = lambda.Parameters[0].Name;

                    // HACK: need to add a leading $ sign to the replacement because of how we resolve values.
                    var body    = FieldNameReplacer.Replace(lambda.Body, sourceSerializationExpression.SerializationInfo.ElementName, "$" + asValue);
                    var inValue = BuildValue(body);

                    result = new BsonDocument("$map", new BsonDocument
                    {
                        { "input", inputValue },
                        { "as", asValue },
                        { "in", inValue }
                    });
                    return(true);
                }

                return(false);
            }
Beispiel #2
0
            public static Expression Replace(Expression node, string oldName, string newName)
            {
                var replacer = new FieldNameReplacer(oldName, newName);

                return(replacer.Visit(node));
            }
 public static Expression Replace(Expression node, string oldName, string newName)
 {
     var replacer = new FieldNameReplacer(oldName, newName);
     return replacer.Visit(node);
 }