예제 #1
0
        private static Func <TIn, TOut> GetFunc()
        {
            ParameterExpression  parameterExpression = Expression.Parameter(typeof(TIn), "p");
            List <MemberBinding> memberBindingList   = new List <MemberBinding>();

            foreach (var item in typeof(TOut).GetProperties())
            {
                if (!item.CanWrite)
                {
                    continue;
                }
                MemberExpression property      = Expression.Property(parameterExpression, typeof(TIn).GetProperty(item.Name));
                MemberBinding    memberBinding = Expression.Bind(item, property);
                memberBindingList.Add(memberBinding);
            }

            MemberInitExpression           memberInitExpression = Expression.MemberInit(Expression.New(typeof(TOut)), memberBindingList.ToArray());
            Expression <Func <TIn, TOut> > lambda = Expression.Lambda <Func <TIn, TOut> >(memberInitExpression, new ParameterExpression[] { parameterExpression });

            return(lambda.Compile());
        }