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