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);
    ……
}

 

posted @ 2021-06-04 10:57  kueizheng  阅读(104)  评论(0编辑  收藏  举报