Entity Framework 通过Lambda表达式更新指定的字段

本文介绍了一种在Entity Framework中更新实体指定字段的方法,并提供了一个实用的Lambda表达式解析工具,用于获取要更新的属性名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来需要EF来更新指定的字段,后来在园子里找到了代码

var StateEntry = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager.GetObjectStateEntry(entity);
StateEntry.SetModifiedProperty(property);

今天看Dos.ORM的源码发现了如何找到Lambda表达式里面的属性值

 public string GetFieldNameByLambda(Expression exprBody)
        {
            var property = "";
            if (exprBody is UnaryExpression)
            {
                property = ((MemberExpression)((UnaryExpression)exprBody).Operand).Member.Name;
            }
            else if (exprBody is MemberExpression)
            {
                property = ((MemberExpression)exprBody).Member.Name;
            }
            else if (exprBody is ParameterExpression)
            {
                property = ((ParameterExpression)exprBody).Type.Name;
            }
            return property;
        }

然后综合一下就可以了

 /// <summary>
        /// 根据Lambda表达式更新字段
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="property"></param>
        /// <returns></returns>
        public TEntity UpdateEntityField(TEntity entity, params Expression<Func<TEntity, object>>[] property)
        {
            IList<string> Pros = new List<string>();
            foreach (var item in property)
            {
                Pros.Add(GetFieldNameByLambda(item.Body));
            }
            return UpdateEntityField(entity,Pros.ToArray());
        }

 

转载于:https://www.cnblogs.com/mvcplus/p/6212334.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值