zoukankan      html  css  js  c++  java
  • 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);
        ……
    }
  • 相关阅读:
    SQLAlchemy使用merge
    Flask 处理文件 file
    PostgreSQL 常用命令
    Elasticsearch 常用命令
    Python3 encode中的unicode-escape和raw_unicode_escape
    Python 字符串16进制转换为字符串
    利用 Redis 实现接口频次限制
    Flask-Limiter 接口访问频次限制
    博客内容管理(2)-「解决方案」分类的内容设定和编写位置
    踩坑 | u盘 | u盘插入电脑无法识别打开
  • 原文地址:https://www.cnblogs.com/Allofus/p/14848681.html
Copyright © 2011-2022 走看看