• C# 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);
        ……
    }
  • 相关阅读:
    序列化二叉树
    把二叉树打印成多行
    按之字形打印数据
    对称的二叉树
    二叉树的下一个结点
    删除链表中重复的结点
    c语言中数组名a和&a详细介绍
    C语言输出格式
    回文素数
    求平均成绩
  • 原文地址:https://www.cnblogs.com/Allofus/p/14848681.html
Copyright © 2020-2023  润新知