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);
        ……
    }
  • 相关阅读:
    声明式事务编程
    PlatformTransactionManager
    编码式事务
    事务的ACID
    struts2的工作原理
    通过Callable接口实现多线程
    Struts2 标签
    Struts2基础
    MySQL性能优化(十)-- 主从复制(一主多从)
    JVM学习(一)
  • 原文地址:https://www.cnblogs.com/Allofus/p/14848681.html
Copyright © 2011-2022 走看看