public Expression BindParameter(ParameterExpression parameter, Dictionary <Expression, Expression> processedExpressions)
        {
            Expression value;

            if (processedExpressions.TryGetValue(this, out value))
            {
                return(value);
            }

            var result = new LocalCollectionExpression(Type, MemberInfo, SourceExpression);

            processedExpressions.Add(this, result);
            result.Fields = Fields.ToDictionary(f => f.Key, f => (IMappedExpression)f.Value.BindParameter(parameter, processedExpressions));
            return(result);
        }
        public Expression Remap(int[] map, Dictionary <Expression, Expression> processedExpressions)
        {
            if (!CanRemap)
            {
                return(this);
            }
            Expression value;

            if (processedExpressions.TryGetValue(this, out value))
            {
                return(value);
            }

            var result = new LocalCollectionExpression(Type, MemberInfo, SourceExpression);

            processedExpressions.Add(this, result);
            result.Fields = Fields.ToDictionary(f => f.Key, f => (IMappedExpression)f.Value.Remap(map, processedExpressions));
            return(result);
        }