protected List <string> NamesOfMembersAndIgnoredProperties()
        {
            var result =
                CustomMembers.Select(x => x.Key.Member.Name)
                .Union(CustomFunctionMembers.Select(x => x.Key.Member.Name))
                .ToList();

            result.AddRange(IgnoreMemberList);
            return(result);
        }
        public void MapFunction <TMember, TNMember>(Expression <Func <TN, TNMember> > left, Func <T, TMember> right)
        {
            var memberExpression = left.Body as MemberExpression;
            Expression <Func <T, TMember> > expr = (t) => right(t);

            var parameterExpression = Expression.Parameter(typeof(T));
            var rightExpression     = Expression.Invoke(expr, parameterExpression);

            CustomFunctionMembers.Add(
                new KeyValuePair <MemberExpression, Expression>(memberExpression, rightExpression));
            //MapFunction<TMember, TNMember>(left, rightExpression, memberExpression);
        }