“高效”!=性能高效=方便 作者:敖士伟 //=======本例解决大量更新实体时,一个属性一个属性地赋值更新较麻烦的问题 LinQ方式实现 /// <summary> /// 修改采购单 /// </summary> /// <param name="cgd">采购单实体</param> /// <returns>采购单号</returns> public bool ModifyCaiGouDan(tbCaiGouJiLu cgd) { //--**修改(一) tbCaiGouJiLu t1_from = cgd; //--**修改(二) tbCaiGouJiLu t1_to = null; SQLServerDBDataContext conn = new SQLServerDBDataContext(sqlcon); SqlTransaction sqltran = null; try { sqlcon.Open(); Type type_from = t1_from.GetType(); //--**修改(三) //不更新的属性,这个根据实际 string[] out_Property = new string[] { "char_CGJL_SN", "money_CGJL_YueE" }; //--**修改(四) //Linq在更新实体时要先从数据库中查询出来 t1_to = conn.tbCaiGouJiLu.Where(t => t.char_CGJL_SN == t1_from.char_CGJL_SN).Single(); Type type_to = t1_to.GetType(); //反射遍历属性 foreach (PropertyInfo pi in type_from.GetProperties()) { string name = pi.Name;//属性名 object value = pi.GetValue(t1_from, null);//属性值 //排除不更新的属性 if (Array.IndexOf<string>(out_Property, name) == -1) { //设置属性值 type_to.GetProperty(name).SetValue(t1_to, value, null); } } //更新数据库 conn.SubmitChanges(); return true; } catch (Exception ex) { sqltran.Rollback(); return false; throw ex; } finally { if (sqlcon.State == ConnectionState.Open) sqlcon.Close(); } }