操作日志
数据对比法
public static string Compare<T>(T old, T cur, string emptyMessage = "无变化")
{
var propertyInfos = old.GetType().GetProperties();//返回当前old的所有公共属性(如果不是同一个实体类对比 ,可获取cur的属性,具体查看注释的代码)
// var curPropertyInfos = cur.GetType().GetProperties();//返回当前cur的所有公共属性
var message = string.Empty;
var filterName = new[] { "ModifyTime", "ModifyUserName", "ModifyUserId", "CreateTime", "CreateUserName", "CreateUserId" };//过滤字段的集合
foreach (var item in propertyInfos)
{
if (filterName.Contains(item.Name)) continue;
var p = propertyInfos.FirstOrDefault(x => x.Name == item.Name);//查找需要记录日志的字段
// var c = curPropertyInfos.FirstOrDefault(x => x.Name == item.Name);
if (p == null) continue;// if (p == null || c == null) continue;
var oldVal = item.GetValue(old);
var newVal = item.GetValue(cur);// var newVal = c.GetValue(cur);
var isCompare = EqualityComparer<object>.Default.Equals(oldVal, newVal);
if (isCompare) continue;
message += $"{item.Name} :{oldVal}=>{newVal} ; ";
}
if (string.IsNullOrEmpty(message)) message = emptyMessage;
return message;
}