public static List<MappingBuilderNode> BuildExpressionTree(ExpressionPair[] mappings) { var expressionParts = mappings.Select(m => new ExpressionPart { Source = m.Source, SourcePath = m.Source.ToPathWithEmptyIndexer(), Parts = ExpressionParser.SplitExpression(m.Dest).ToArray(), Converter = m.Converter }) .ToArray(); var nodeMap = new Dictionary<string, MappingBuilderNode>(); foreach (var part in expressionParts) CreateNodes(part.Parts, part.Source, part.Converter, 0, nodeMap); var result = nodeMap.Values.OfType<RootNode>() .Cast<MappingBuilderNode>() .ToList(); return result; }