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);
        ……
    }
  • 相关阅读:
    .Net和SqlServer的事务处理实例
    SQL Server-- 存储过程中错误处理
    Asp.Net中使用Newtonsoft.Json转换,读取,写入
    从客户端中检测到有潜在危险的 Request.Form 值
    -Json与Xml之间的转换
    c#操作xml的代码(插入节点、修改节点、删除节点等)
    重置SQL Server sa密码
    用exec调用带有output输出参数的存储过程
    日期获取 net
    PhoneListenerService
  • 原文地址:https://www.cnblogs.com/Allofus/p/14848681.html
Copyright © 2011-2022 走看看