public static IReadOnlyList <SerializationExpression> Gather(Expression node) { var gatherer = new FieldGatherer(); gatherer.Visit(node); return(gatherer._serializationExpressions); }
protected override Expression VisitMethodCall(MethodCallExpression node) { if (!IsLinqMethod(node, "Select", "SelectMany")) { return(base.VisitMethodCall(node)); } var source = node.Arguments[0] as SerializationExpression; if (source != null) { var fields = FieldGatherer.Gather(node.Arguments[1]); if (fields.Any(x => x.SerializationInfo.ElementName.StartsWith(source.SerializationInfo.ElementName))) { _serializationExpressions.AddRange(fields); return(node); } } return(base.VisitMethodCall(node)); }