PropertyInfo 反射实体部分字段
目的:将一个对象的字段赋值给另外一个对象,为空或默认值则不赋值
关键代码:
PropertyInfo[] props = typeof(hospital).GetProperties(); foreach (PropertyInfo p in props) { if (p.PropertyType.FullName == "System.String" && p.GetValue(entity) != null) p.SetValue(model, p.GetValue(entity)); if (p.PropertyType.FullName == "System.Guid" && p.GetValue(entity).ToString() != Guid.Empty.ToString()) p.SetValue(model, p.GetValue(entity)); if (p.PropertyType.FullName == "System.DateTime" && p.GetValue(entity).ToString() != Convert.ToDateTime("0001-01-01 00:00:00").ToString()) p.SetValue(model, p.GetValue(entity)); if (p.PropertyType.FullName == "System.SByte" && p.GetValue(entity).ToString() != null) p.SetValue(model, p.GetValue(entity)); }
具体代码:
1.添加我们的实体类
public class hospital { public Guid id { get; set; } public string hospital_id { get; set; } public string name { get; set; } public string acronym { get; set; } public DateTime create_time { get; set; } public sbyte? status { get; set; } }
2.封装关键代码到公共类
public class PropertyTrade { public static void Voluation<T>(T model, T entity) { PropertyInfo[] props = typeof(T).GetProperties(); foreach (PropertyInfo p in props) { if (p.PropertyType.FullName == "System.String" && p.GetValue(entity) != null) p.SetValue(model, p.GetValue(entity)); if (p.PropertyType.FullName == "System.Guid" && p.GetValue(entity).ToString() != Guid.Empty.ToString()) p.SetValue(model, p.GetValue(entity)); if (p.PropertyType.FullName == "System.DateTime" && p.GetValue(entity).ToString() != Convert.ToDateTime("0001-01-01 00:00:00").ToString()) p.SetValue(model, p.GetValue(entity)); if (p.PropertyType.FullName == "System.SByte" && p.GetValue(entity).ToString() != null) p.SetValue(model, p.GetValue(entity)); } } }
3.调用
var entity = json.ToString().ToObject<hospital>(); Expression<Func<hospital, bool>> filter = u => u.id == entity.id; var model = idal.GetAnyAsync(filter).Result.FirstOrDefault(); if (model != null) { PropertyTrade.Voluation<hospital>(model, entity); int count = await idal.UpdateAsync(model); …… }