Entity Framework 通過Lambda表達式更新指定的字段


本來需要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());
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM