protected internal virtual Expression VisitDocument(DocumentExpression node) { return(node); }
protected internal virtual Expression VisitDocument(DocumentExpression node) { return node; }
private bool CompareDocument(DocumentExpression a, DocumentExpression b) { // not exact... return(a.Serializer.GetType() == b.Serializer.GetType()); }
protected internal override Expression VisitDocument(DocumentExpression node) { return new FieldExpression( _prefix, node.Serializer); }
public SerializationExpression BindProjector(ref Expression selector) { var projector = selector as SerializationExpression; if (selector.NodeType == ExpressionType.MemberInit || selector.NodeType == ExpressionType.New) { var serializer = GetSerializer(selector.Type, selector); projector = new DocumentExpression(serializer); } else if (projector == null || projector is IFieldExpression || projector is ArrayIndexExpression) { var newFieldName = "__fld0"; if (projector is IFieldExpression) { // We don't have to do this, but it makes the output a little nicer. newFieldName = ((IFieldExpression)projector).FieldName; } // the output of a $project stage must be a document, so // if this isn't already a serialization expression and it's not // a new expression or member init, then we need to create an // artificial field to project the computation into. var serializer = GetSerializer(selector.Type, selector); selector = new FieldAsDocumentExpression(selector, newFieldName, serializer); projector = new FieldExpression(newFieldName, serializer); } return projector; }