示例#1
0
        /// <summary>
        /// 用于映射Comment的函数
        /// </summary>
        /// <param name="columnName"></param>
        /// <param name="member"></param>
        /// <returns></returns>
        public ExcelMapper <TEntity> MapCommentFor(string columnName, Expression <Func <TEntity, string> > member)
        {
            var map = new ExcelMapperSelector <TEntity>()
            {
                ColumnName   = columnName,
                ColumnIdx    = IndexDict[columnName],
                SetValueFunc = null,
            };



            ParameterExpression objectParameterExpression = Expression.Parameter(typeof(TEntity)), valueParameterExpression = Expression.Parameter(typeof(string));
            Expression <Action <TEntity, string> > setValueExpression = Expression.Lambda <Action <TEntity, string> >(
                Expression.Block(
                    Expression.Assign(Expression.Property(objectParameterExpression, ((MemberExpression)member.Body).Member.Name), valueParameterExpression)
                    ), objectParameterExpression, valueParameterExpression
                );
            Action <TEntity, string> setValue = setValueExpression.Compile();

            map.SetValueFunc = (e, val) => {
                setValue(e, (string)val);
            };
            commentSelectors.Add(map);
            return(this);
        }
示例#2
0
        /// <summary>
        /// 设置映射结果
        /// 对每一列,都会调用member= mapFunc(this[columnName])
        /// </summary>
        /// <typeparam name="TResult"></typeparam>
        /// <param name="columnName">对应的Excel列名</param>
        /// <param name="member">选择要映射到成员</param>
        /// <param name="mapFunc">映射函数,如果为空,就调用ToString</param>
        /// <returns></returns>
        public ExcelMapper <TEntity> MapFor <TResult>(string columnName, Expression <Func <TEntity, TResult> > member, Func <object, TResult> mapFunc = null)
        {
            var map = new ExcelMapperSelector <TEntity>()
            {
                ColumnName   = columnName,
                ColumnIdx    = IndexDict[columnName],
                SetValueFunc = null,
            };

            if (mapFunc == null)
            {
                ParameterExpression objectParameterExpression = Expression.Parameter(typeof(TEntity)), valueParameterExpression = Expression.Parameter(typeof(string));
                Expression <Action <TEntity, string> > setValueExpression = Expression.Lambda <Action <TEntity, string> >(
                    Expression.Block(
                        Expression.Assign(Expression.Property(objectParameterExpression, ((MemberExpression)member.Body).Member.Name), valueParameterExpression)
                        ), objectParameterExpression, valueParameterExpression
                    );
                Action <TEntity, string> setValue = setValueExpression.Compile();
                map.SetValueFunc = (e, val) => {
                    setValue(e, val.ToString());
                };
            }
            else
            {
                ParameterExpression objectParameterExpression = Expression.Parameter(typeof(TEntity)), valueParameterExpression = Expression.Parameter(typeof(TResult));
                Expression <Action <TEntity, TResult> > setValueExpression = Expression.Lambda <Action <TEntity, TResult> >(
                    Expression.Block(
                        Expression.Assign(Expression.Property(objectParameterExpression, ((MemberExpression)member.Body).Member.Name), valueParameterExpression)
                        ), objectParameterExpression, valueParameterExpression
                    );
                Action <TEntity, TResult> setValue = setValueExpression.Compile();

                map.SetValueFunc = (e, val) => {
                    TResult rst = mapFunc(val);
                    setValue(e, rst);
                };
            }
            selectors.Add(map);
            return(this);
        }