C# GetType().GetProperty(name).SetValue与Expression

一、简单谈谈GetType().GetProperty(name),一般是知道类的属性名字,再给属性赋值。

代码如下:

<span style="font-size:18px;"> /// <summary>
        /// 将指定的列复制给实体对象
        /// </summary>
        /// <typeparam name="TEntity">实体对象类型</typeparam>
        /// <param name="fromEntity">来源实体</param>
        /// <param name="toEntity">需要转换的实体</param>
        /// <param name="propertySelector">属性选择器</param>
        /// <returns></returns>
        public static TEntity Mapper<TEntity>(this TEntity fromEntity, TEntity toEntity, Expression<Func<TEntity, object>> propertySelector) where TEntity : class
        {
            if (propertySelector == null) return toEntity;

            var propertyList = ExpressionHelper.GetPropertyByExpress(propertySelector);

            if (propertyList == null) return toEntity;

            bool IsUpdate = false;
            if (!propertyList.Contains("ModifiedTime"))
            {
                IsUpdate = true;
                propertyList.Add("ModifiedTime");
            }

            foreach (var name in fromEntity.GetPropertyList().Where(p => propertyList.Contains(p)))
            {
                object value;
                if (IsUpdate && name == "ModifiedTime")
                {
                    value = DateTime.Now;
                }
                else
                {
                    value = fromEntity.GetType().GetProperty(name).GetValue(fromEntity, null);
                }
                toEntity.GetType().GetProperty(name).SetValue(toEntity, value, null);
            }
            return toEntity;
        }</span>
、 Expression  Lamba表达式之用,主要是用于分析Lamba表达式,想进一步对Lamba表达式进行数据操作

代码如下:

        /// <summary>
        /// 解析表达式的字段并返回数据库列名
        /// </summary>
        /// <typeparam name="TEntity">实体对象</typeparam>
        /// <param name="expression">表达式树</param>
        /// <returns></returns>
        public static List<string> GetPropertyByExpress<TEntity>(Expression<Func<TEntity, object>> expression) where TEntity : class
        {
            List<string> propertyList = new List<string>();

            if (expression == null) return propertyList;

            if ((expression != null) && (!(expression.Body is NewExpression) || ((expression.Body as NewExpression).Members.Count == 0)))
            {
                return propertyList;
            }

            propertyList.AddRange((expression.Body as NewExpression).Members.Select(info => info.Name));

            return propertyList;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值