思路:找到要更新的 找到原来的 然后利用反射 属性值一一对比 新加的,更新的 删除的 字段名字和内容加到一个集合中
//变动的字段 和 变动后的值
public class UpdateInfo
{
public string Field { get; set; }
public string Value { get; set; }
}
//信息变更 查看详情需要 找到哪些人员信息变动了
var UpdateInfo = new List<UpdateInfo>();
var WantUpdatedata = MHBasicLevelCadreTempApp.Repository.FindSingle(t => t.Id == Id && t.IsLast);
if (WantUpdatedata != null)
{
var Nowdata = MHBasicLevelCadreTempApp.Repository.FindSingle(t => t.CadreId == WantUpdatedata.CadreId && t.Version == WantUpdatedata.Version - 1);
if (Nowdata != null)
{
PropertyInfo[] pisOne = WantUpdatedata.GetType().GetProperties(); //获取所有公共属性(Public)
PropertyInfo[] pisTwo = Nowdata.GetType().GetProperties();
for (int i = 0; i < pisOne.Length; i++)
{
//获取属性名
string Name = pisOne[i].Name;
//获取属性的值
var wantupdatevalue = WantUpdatedata.GetType().GetProperty(Name).GetValue(WantUpdatedata, null);
var nowdatavalue = Nowdata.GetType().GetProperty(Name).GetValue(Nowdata, null);
if (wantupdatevalue == null)
{
if (nowdatavalue != null)
{
var obj = new UpdateInfo { Field = Name, Value = nowdatavalue.ToString() };
UpdateInfo.Add(obj);
}
}
else if (wantupdatevalue != null)
{
if (nowdatavalue != null)
{
if (!wantupdatevalue.Equals(nowdatavalue))
{
var obj = new UpdateInfo { Field = Name, Value = nowdatavalue.ToString() };
UpdateInfo.Add(obj);
}
}
else if (nowdatavalue == null)
{
var obj = new UpdateInfo { Field = Name, Value = null };
UpdateInfo.Add(obj);
}
}
}
rtn.UpdateInfo = UpdateInfo;
}
}